Swift 何时从单元格本身中选择自定义单元格?

Swift 何时从单元格本身中选择自定义单元格?,swift,xcode,uitableview,Swift,Xcode,Uitableview,我已经创建了一个自定义的UITableViewCell(以及一个用于脚本设计器中布局的XIB)。我知道父表视图是如何通过触发didselectrowatinexpath来通知单元格选择的,但我似乎不知道如何捕获单元格本身中的单元格选择。有人能给我指一下正确的方向吗?我使用XCode 8和Swift 2。谢谢 下面是我的简单自定义单元格类,其中包含在选择单元格时要处理的存根函数: class MyCustomCell: UITableViewCell { func didSelect(inde

我已经创建了一个自定义的
UITableViewCell
(以及一个用于脚本设计器中布局的XIB)。我知道父表视图是如何通过触发
didselectrowatinexpath
来通知单元格选择的,但我似乎不知道如何捕获单元格本身中的单元格选择。有人能给我指一下正确的方向吗?我使用XCode 8和Swift 2。谢谢

下面是我的简单自定义单元格类,其中包含在选择单元格时要处理的存根函数:

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

不太清楚为什么需要这样做,单元格的选择可以由。但是,如果您坚持将代码放在cell类中,您可以在委托方法
didSelectRowAt
中调用
didSelect
,如下所示:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    (tableView.cellForRow(at: indexPath) as? MyCustomCell).didSelect(indexPath)
}

通常,处理选择的代码将直接出现在该方法中,但您可以像我上面所做的那样调用您的单元格。

您可以做的是在UITableView上侦听
didSelectRowAtIndexPath
,然后调用单元格中的函数。下面是一个例子:

class MyCustomCell: UITableViewCell {
    func didSelect(indexPath: NSIndexPath) {
        // perform some actions here
    }
}
然后,在您的
中选择rowatindexpath

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if let cell = tableView.cellForRow(at: indexPath) as? MyCustomCell {
        cell.didSelect(indexPath: indexPath)
    }
}

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

UITableViewCell
类中有一个属性:
isSelected
,它是BOOL类型。参考:

您可以通过调用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(u:animated:)
(check:)方法,每次您从任何位置选择单元格时都会自动调用该方法。

您究竟为什么需要检测从单元格本身中选择的单元格?这是
UITableViewDelegate
的一种行为。这不是从默认的UITableViewCell类完成的。因此,您甚至不需要在自定义单元格类中具有这种行为。只需使用
UITableViewDelegate
的方法并调用自定义类的自定义方法。就这样。简单而干净的建议:我有一个自定义的cell类w/xib,我想用几个分段封装到不同的视图中,我想触发的视图的一部分是当选择了cell本身时。我希望能够动态地将此自定义单元格添加到tableview,而不是强制tableview/委托管理单元格选择和随后触发另一个视图的封装segue&presentation。自定义单元格及其行为、分段、其他视图的表示等都应该在不必将方法/回调等与tableview关联的情况下进行处理。我错过了什么?嗯,现在我明白你的目的了。请看下面我的答案:。我希望这会比你接受的答案更能帮助你。不过,这是可行的,你基本上是让你的单元格告诉你的表视图一些事情,然后你让你的表视图转过来告诉你的单元格同样的事情。这会产生一种奇怪的“代码气味”。我建议在手机上安装一个手势识别器。