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关联的情况下进行处理。我错过了什么?嗯,现在我明白你的目的了。请看下面我的答案:。我希望这会比你接受的答案更能帮助你。不过,这是可行的,你基本上是让你的单元格告诉你的表视图一些事情,然后你让你的表视图转过来告诉你的单元格同样的事情。这会产生一种奇怪的“代码气味”。我建议在手机上安装一个手势识别器。