因为我最近阅读了这篇文章并且它对我有所帮助,所以我想发布另一个答案以整合所有答案(供后代使用)。
因此,根据您想要的逻辑和/或结果,实际上有 5 种不同的答案:
1.禁用蓝色突出显示而不改变单元格的任何其他交互:
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
当我在 UITableViewCell 中托管 UIButton 或其他一些控件并且我希望用户能够与控件而不是单元格本身进行交互时,我会使用它。
注意:正如上面提到的 Tony Million,这不会阻止 tableView:didSelectRowAtIndexPath:。我通过简单的“if”语句来解决这个问题,最常见的是测试该部分并避免对特定部分采取行动。
我想到的另一种测试单元格敲击的方法是:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// A case was selected, so push into the CaseDetailViewController
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (cell.selectionStyle != UITableViewCellSelectionStyleNone) {
// Handle tap code here
}
}
2.要对整个表格执行此操作,您可以将上述解决方案应用于表格中的每个单元格,但您也可以这样做:
[tableView setAllowsSelection:NO];
在我的测试中,这仍然允许UITableViewCell 中的控件进行交互。
3.要使单元格“只读”,您可以这样做:
[cell setUserInteractionEnabled:NO];
4.使整个表格“只读”
[tableView setUserInteractionEnabled:NO];
5.动态判断是否高亮单元格(根据this answer隐含选择),可以实现如下UITableViewDelegate协议方法:
- (BOOL)tableView:(UITableView *)tableView
shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath