是否有一种方法可以禁止UITableViewCell触发didSelectCellAtIndexPath:
委托,同时仍保留使用该单元附件视图中的UISwitch的功能。
我知道你可以设置cell.userInteractionEnabled = NO,这将禁用单元格,但也阻止我在附件视图中使用开关。我知道我也可以尝试检测didSelectCellAtIndexPath:
方法中的单元格,但由于我的表视图是动态的,并且根据用户的操作而变化,这可能会变得混乱。
我正在寻找一种可以使用的简单而优雅的解决方案。有什么想法吗?
答案 0 :(得分:7)
如果你不想使用cell.userInteractionEnabled = NO 然后你设置cell.selectionStyle = UITableViewCellSelectionStyleNone
让你的单元格触发didSelectRowAtIndexPath。
现在,在此方法“didSelectRowAtIndexPath”中,您必须通过比较该特定索引处的数据源数组中的对象类型来避免/忽略选择。
答案 1 :(得分:0)
直接向UISwitch
添加事件监听器,而不是依赖didSelectRowAtIndexPath
。
-(void)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
// Here I assume you created a subclass MyCell of UITableViewCell
// And exposed a member named 'switch' that points to your UISwitch
MyCell* cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
cell = [[MyCell alloc] init];
cell.selectionStyle = UITableViewCellSelectionStyleNone; // This could be moved into MyCell class
[cell.switch addTarget:self action:@selector(switchChanged:) forControlEvent:UIControlEventValueChanged];
}
// Now we need some way to know which cell is associated with the switch
cell.switch.tag = indexPath.row;
}
现在要收听swich事件,在同一个类中添加此方法
-(void)switchChanged:(UISwitch*)switch {
NSUInteger cellIndex = switch.tag;
...
}