我如何禁用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?