检测何时从单元格内部选择自定义单元格?

时间:2017-01-11 02:36:21

标签: swift xcode uitableview

我创建了一个自定义UITableViewCell(以及故事板设计器中的布局XIB)。我理解父表视图如何通过触发didSelectRowAtIndexPath来通知单元格选择,但我似乎无法弄清楚如何捕获单元格内单元格的选择。有人能指出我在正确的方向吗?我正在使用XCode 8和Swift 2.谢谢!

这是我的简单自定义单元类,它具有在选择单元格时要处理的存根函数:

class MyCustomCell: UITableViewCell {
  func didSelect(indexPath: NSIndexPath ) {
    // perform some actions here
  }
}

3 个答案:

答案 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)

好。我明白你的意思。如果从其他任何位置选择单元格,您希望从自定义类中执行某些操作。正确?

UITableViewCellisSelected中有一个 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)
}

通常,处理选择的代码将直接显示在此方法中,但您可以像上面的方式一样调用您的单元格。