Swift 3.0 中的选择器
Selector In Swift 3.0
我对 Swift 3.0
有疑问
在 Objective-C 中,您可以像这样
为 selector
声明一个 属性
@property (nonatomic,assign)SEL ItemSelected;
但是如何在 Swift 3.0 中将选择器声明为 属性 因为我想在其他 class 中使用这个 属性 并且应该在 属性 中采取行动 class.
我正在尝试像这样使用它(在 tableview 单元格中声明):
var itemSelected = #selector(selctedItem(_ :))
在 viewcontroller table 视图单元格中使用它
cell.itemSelected(target: self, action: HomeViewController.self.selctedItem(_ :))
出现错误
use of Undeclared item selectedItem
我不确定如何在 tableview with selctor 中使用。
您可以像这样在 Swift 3 中声明选择器。
var itemSelected: Selector?
或
var itemSelected = #selector(tapGesture)
稍后您可以像这样使用上面的 itemSelected
选择器。
例如:
let tap = UITapGestureRecognizer(target: self, action: itemSelected)
并且 tapGesture
声明为
func tapGesture(_ sender: UITapGestureRecognizer) { }
编辑: 您在 TableViewCell
中添加了 collectionView
,因此要获取 CollectionViewCell
的选定 IndexPath,请声明一个协议并将它与您的 tableViewCell 一起使用。
protocol SelectedCellDelegate {
func getIndexPathOfSelectedCell(tableIndexPath: IndexPath, collectionViewCell indexPath: IndexPath)
}
现在在您的 CustomTableViewCell 中创建一个 SelectedCellDelegate 实例和一个 IndexPath
实例。
class CustomTableCell: UITableViewCell, UICollectionViewDelegate, UICollectionViewDataSource {
//All outlet
var delegate: SelectedCellDelegate?
var tableCellIndexPath = IndexPath()
//CollectionViewDataSource method
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
self.delegate?.getIndexPathOfSelectedCell(tableIndexPath: tableCellIndexPath, indexPath: indexPath)
}
}
现在在您的 ViewController 中添加了 TableView 的地方实施协议 SelectedCellDelegate
并在 cellForRowAt indexPath
方法中设置 delegate
和 tableCellIndexPath
。
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, SelectedCellDelegate {
//your methods
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell // Initialize the cell with your custom TableCell
cell.delegate = self
cell.tableCellIndexPath = indexPath
return cell
}
现在在 ViewController 中添加委托方法。
func getIndexPathOfSelectedCell(tableIndexPath: IndexPath, collectionViewCell indexPath: IndexPath) {
print("TableView cell indexPath - \(tableIndexPath)")
print("CollectionView cell indexPath - \(indexPath)")
}
我对 Swift 3.0
有疑问在 Objective-C 中,您可以像这样
为selector
声明一个 属性
@property (nonatomic,assign)SEL ItemSelected;
但是如何在 Swift 3.0 中将选择器声明为 属性 因为我想在其他 class 中使用这个 属性 并且应该在 属性 中采取行动 class.
我正在尝试像这样使用它(在 tableview 单元格中声明):
var itemSelected = #selector(selctedItem(_ :))
在 viewcontroller table 视图单元格中使用它
cell.itemSelected(target: self, action: HomeViewController.self.selctedItem(_ :))
出现错误
use of Undeclared item selectedItem
我不确定如何在 tableview with selctor 中使用。
您可以像这样在 Swift 3 中声明选择器。
var itemSelected: Selector?
或
var itemSelected = #selector(tapGesture)
稍后您可以像这样使用上面的 itemSelected
选择器。
例如:
let tap = UITapGestureRecognizer(target: self, action: itemSelected)
并且 tapGesture
声明为
func tapGesture(_ sender: UITapGestureRecognizer) { }
编辑: 您在 TableViewCell
中添加了 collectionView
,因此要获取 CollectionViewCell
的选定 IndexPath,请声明一个协议并将它与您的 tableViewCell 一起使用。
protocol SelectedCellDelegate {
func getIndexPathOfSelectedCell(tableIndexPath: IndexPath, collectionViewCell indexPath: IndexPath)
}
现在在您的 CustomTableViewCell 中创建一个 SelectedCellDelegate 实例和一个 IndexPath
实例。
class CustomTableCell: UITableViewCell, UICollectionViewDelegate, UICollectionViewDataSource {
//All outlet
var delegate: SelectedCellDelegate?
var tableCellIndexPath = IndexPath()
//CollectionViewDataSource method
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
self.delegate?.getIndexPathOfSelectedCell(tableIndexPath: tableCellIndexPath, indexPath: indexPath)
}
}
现在在您的 ViewController 中添加了 TableView 的地方实施协议 SelectedCellDelegate
并在 cellForRowAt indexPath
方法中设置 delegate
和 tableCellIndexPath
。
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, SelectedCellDelegate {
//your methods
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell // Initialize the cell with your custom TableCell
cell.delegate = self
cell.tableCellIndexPath = indexPath
return cell
}
现在在 ViewController 中添加委托方法。
func getIndexPathOfSelectedCell(tableIndexPath: IndexPath, collectionViewCell indexPath: IndexPath) {
print("TableView cell indexPath - \(tableIndexPath)")
print("CollectionView cell indexPath - \(indexPath)")
}