当你点击UITableView中的一行时,该行会高亮显示并被选中。是否有可能禁用这个,所以点击一行什么都不做?


当前回答

在属性检查器中的UITableViewCell的XIB中,将Selection的值设置为None。

其他回答

你所要做的就是在UITableViewCell实例上设置选择样式:

objective - c:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

or

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

斯威夫特2:

cell.selectionStyle = UITableViewCellSelectionStyle.None

Swift 3和4.x:

cell.selectionStyle = .none

此外,确保你没有在你的表视图委托中实现-tableView:didSelectRowAtIndexPath:或者显式地排除你想要没有动作的单元格。

更多信息在这里和这里

根据我自己的实践经验,总结一下我认为的正确答案:

如果你想禁用部分单元格的选择,请使用:

cell.userInteractionEnabled = NO;

除了阻止选择,这也会阻止设置了tableView:didSelectRowAtIndexPath的单元格被调用。(感谢Tony Million的回答,谢谢!)

如果你的单元格中有需要点击的按钮,你需要改为:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

并且你还需要忽略单元格中的任何点击- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath。

如果你想禁用整个表的选择,使用:

tableView.allowsSelection = NO;

(感谢保罗·德·巴罗斯!)

你也可以通过在检查面板的选择选项(UITableView属性)中选择NoSelection来禁用界面构建器本身的行选择,如下图所示

你也可以将背景颜色设置为Clear,以达到与UITableViewCellSelectionStyleNone相同的效果,以防你不想/不能使用UITableViewCellSelectionStyleNone。

您将使用如下代码:

UIView *backgroundColorView = [[UIView alloc] init];
backgroundColorView.backgroundColor = [UIColor clearColor];
backgroundColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView: backgroundColorView];

这可能会降低您的性能,因为您添加了一个额外的彩色视图到每个单元格。

在UITableViewDataSource协议中,在方法cellForRowAt中添加:

let cell = tableView.dequeueReusableCell(withIdentifier: "YOUR_CELL_IDENTIFIER", for: indexPath)                
cell.selectionStyle = .none
return cell

OR

你可以到故事板>选择单元格>身份检查器>选择,从下拉菜单中选择none。