你可以像這樣在Swift 3中聲明選擇器。
var itemSelected: Selector?
或者
var itemSelected = #selector(tapGesture)
之後你可以使用上面itemSelected
選擇用這樣的行動。
對於如:
let tap = UITapGestureRecognizer(target: self, action: itemSelected)
而且tapGesture
聲明如下
func tapGesture(_ sender: UITapGestureRecognizer) { }
編輯:您已經添加collectionView
您TableViewCell
裏面,所以得到的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
並設置delegate
和tableCellIndexPath
在cellForRowAt indexPath
方法。
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)")
}
如果我不喜歡把param ItemSelected給它的錯誤如未解析的標識符怎麼辦?如果我聲明var selector = #selector()它給出錯誤 – User
@IOS_PROGRAMMER聲明它像第一個例如可選'var itemSelected:Selector?',後者設置它的值。 –
如果我聲明它爲oprional,它告訴不能調用非函數類型 – User