UITableView将某些单元设置为"不可选"

Mug*_*nth 108 iphone cocoa-touch

如何将UITableView的单元格属性设置为不可选?当用户点击单元格时,我不希望看到蓝色选择框.

Seb*_*lis 194

防止行选择

要完全防止选择UITableViewCell,请拥有您的UITableViewDelegate工具tableView:willSelectRowAtIndexPath:.nil如果您不希望选择该行,则可以从该方法返回.

- (NSIndexPath *)tableView:(UITableView *)tv willSelectRowAtIndexPath:(NSIndexPath *)path
{
    // Determine if row is selectable based on the NSIndexPath.

    if (rowIsSelectable) {
        return path;
    }
    return nil;
}
Run Code Online (Sandbox Code Playgroud)

这可以防止选择和tableView:didSelectRowAtIndexPath:调用行.但是请注意,这并没有阻止该行被突出显示.

防止行突出显示

如果您希望阻止在触摸时通过视觉突出显示该行,您可以确保将单元格selectionStyle设置为UITableViewCellSelectionStyleNone,或者最好您可以按如下方式使用您的UITableViewDelegate工具tableView:shouldHighlightRowAtIndexPath::

- (BOOL)tableView:(UITableView *)tv shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Determine if row is selectable based on the NSIndexPath.

    return rowIsSelectable;
}
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,这应该是公认的答案.它实际上修复了问题,而不是掩盖它. (10认同)
  • 我同意@simpleBob.要使用此解决方案,还需要在不可选择的行上将cell.selectionStyle设置为UITableViewCellSelectionStyleNone.否则它看起来很俗气. (5认同)
  • 请注意,在突出显示单元格后会调用tableView:willSelectRowAtIndexPath:,这将产生闪烁.从Apple的描述:_这个方法不会被调用,直到用户触摸一行然后抬起他们的手指; 直到那时才会选择该行,尽管它在触摸时突出显示._ (4认同)

Dan*_*son 151

将表格单元格的selectionStyle属性设置为UITableViewCellSelectionStyleNone.这应该可以防止它突出显示,你也可以检查你的属性tableView:didSelectRowAtIndexPath:.

  • 肯德尔是对的.按照Sebastian Celis的回答,首先要防止didSelectRowAtIndexPath被调用.但是,您还应该设置selectionStyle以防止突出显示. (3认同)

han*_*Dev 16

用这个:

cell.selectionStyle = UITableViewCellSelectionStyleNone;
Run Code Online (Sandbox Code Playgroud)

  • 这只会停止显示的选择颜色,仍然会调用`didSelectRowAtIndexPath`. (4认同)

Ayu*_*oel 11

仅适用于iOS 6+.

您可以tableView:shouldHighlightRowAtIndexPath:在委托中实现该方法 .点击此处了解更多信息:http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html

  • 应该有更多的选票.这是正确的答案,更改选择样式,因此您无法看到选中的单元格,禁用用户交互,因此无法点击单元格或取消选择单元格是hacks. (3认同)

JOM*_*JOM 9

也有这个问题,尝试过所有已经提到过的问题.在选择表格单元时摆脱"蓝色闪光"的最后一招是添加以下行:

self.myTableView.allowsSelection = NO;
Run Code Online (Sandbox Code Playgroud)

不确定是这一行还是一切都结合在一起,但作为总体结果,我不再获得蓝色选择甚至蓝色闪光.快乐!

  • 问题在于它使得tableview中的所有单元格都无法选择。如果您希望某些单元格可选择,而其他单元格不可选择,则不会这样做。塞巴斯蒂安的方法对我有用。 (2认同)

Rob*_*ner 8

cell.userInteractionEnabled = NO;


Bri*_*ian 5

使用IB也是一种优雅的方式:

在此输入图像描述