我创建了一个自定义UITableViewCell
(以及故事板设计器中的布局XIB)。我理解父表视图如何通过触发didSelectRowAtIndexPath
来通知单元格选择,但我似乎无法弄清楚如何捕获单元格内单元格的选择。有人能指出我在正确的方向吗?我正在使用XCode 8和Swift 2.谢谢!
这是我的简单自定义单元类,它具有在选择单元格时要处理的存根函数:
class MyCustomCell: UITableViewCell {
func didSelect(indexPath: NSIndexPath ) {
// perform some actions here
}
}
答案 0 :(得分:2)
你可以做的是在UITableView上监听didSelectRowAtIndexPath
,然后在单元格中调用一个函数。这是一个例子:
class MyCustomCell: UITableViewCell {
func didSelect(indexPath: NSIndexPath) {
// perform some actions here
}
}
然后,在didSelectRowAtIndexPath
:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let cell = tableView.cellForRow(at: indexPath) as? MyCustomCell {
cell.didSelect(indexPath: indexPath)
}
}
答案 1 :(得分:2)
好。我明白你的意思。如果从其他任何位置选择单元格,您希望从自定义类中执行某些操作。正确?
UITableViewCell
类isSelected
中有一个 BOOL 类型的属性。参考:Apple Documentation Link
您可以通过调用 self 来检查此属性是否为true / false。然后,您可以在课堂上执行所需的操作。
这是Objective-C中的一个例子,因为我对swift不是很熟悉。但我认为每个人都可以得到这个:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
if (self.selected) {
NSLog(@"Whoa you selected a cell");
// or perform your desired action
}
}
此处- (void)setSelected:(BOOL)selected animated:(BOOL)animated
方法相当于swift中的setSelected(_:animated:)
(检查:here),每次从任何地方选择单元格时都会自动调用它。
答案 2 :(得分:0)
不太确定为什么你需要这样做,UITableViewDelegate可以处理细胞的选择。但如果您坚持在单元格类中包含代码,则可以在委托方法didSelect
内调用didSelectRowAt
,如:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
(tableView.cellForRow(at: indexPath) as? MyCustomCell).didSelect(indexPath)
}
通常,处理选择的代码将直接显示在此方法中,但您可以像上面的方式一样调用您的单元格。