我如何禁用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
链接地址: http://www.djcxy.com/p/8687.html

上一篇: How can I disable the UITableView selection highlighting?

下一篇: How do you make vim unhighlight what you searched for?