我如何禁用UITableView选择突出显示?
  当您在UITableView点击一行时,该行将突出显示并被选中。  是否有可能禁用此功能,因此点击一行无能为力? 
对我而言,以下工作正常:
 tableView.allowsSelection = NO; 
  这意味着didSelectRowAt#根本行不通。  也就是说,触摸表格中的一行,就不会做任何事情。  (因此,显然,永远不会有选择动画。) 
  (请注意,如果在单元格中有UIButton或任何其他控件,那么当然这些控件仍然可以工作。在表格单元格中碰巧有的任何控件与UITableView允许您“选择一行“使用didSelectRowAt# 。) 
  您所要做的就是使用以下任一方法在UITableViewCell实例上设置选择样式: 
Objective-C的:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
要么
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
Swift 2:
cell.selectionStyle = UITableViewCellSelectionStyle.None
Swift 3:
cell.selectionStyle = .none
  此外,请确保您在表视图委托中不实施-tableView:didSelectRowAtIndexPath:或者如果您实施了它,请明确排除您希望没有操作的单元。 
更多信息在这里和这里
  因为我最近阅读过这篇文章,它帮了我很大的忙,所以我想发表另一个答案来巩固所有的答案(后人)。 
所以,根据您所需的逻辑和/或结果,实际上有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.要确定是否突出显示单元格(根据此答案隐式包含选择),可以实现以下UITableViewDelegate协议方法: 
- (BOOL)tableView:(UITableView *)tableView 
   shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
上一篇: How can I disable the UITableView selection highlighting?
