当你点击UITableView中的一行时,该行会高亮显示并被选中。是否有可能禁用这个,所以点击一行什么都不做?


当前回答

禁用UITableView中所有uitableviewcell的选择

tableView.allowsSelection = false

禁用特定uitableviewcell的选择

cell.selectionStyle = UITableViewCell.SelectionStyle.none

其他回答

根据我自己的实践经验,总结一下我认为的正确答案:

如果你想禁用部分单元格的选择,请使用:

cell.userInteractionEnabled = NO;

除了阻止选择,这也会阻止设置了tableView:didSelectRowAtIndexPath的单元格被调用。(感谢Tony Million的回答,谢谢!)

如果你的单元格中有需要点击的按钮,你需要改为:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

并且你还需要忽略单元格中的任何点击- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath。

如果你想禁用整个表的选择,使用:

tableView.allowsSelection = NO;

(感谢保罗·德·巴罗斯!)

至少从iOS 6开始,你可以覆盖自定义单元格中的方法来阻止蓝色高亮。没有其他交互被禁用或影响。所有三个都必须被覆盖。

- (void) setHighlighted:(BOOL)highlighted
{
}

- (void) setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
}

- (void) setSelected:(BOOL)selected animated:(BOOL)animated
{
}

试试这个

cell.selectionStyle = UITableViewCellSelectionStyleNone;

and

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

你也可以使用interfacebuilder设置选择样式。

我们可以编写这样的代码

 cell.selectionStyle = UITableViewCellSelectionStyleNone;

但当我们有自定义单元格xib时,在该行上面给出警告

自定义单元格xib

我们需要从界面构建器中设置选择样式为None

斯威夫特3,4和5

更好的做法是,在UITableViewCell中编写代码

例如,你有名为MyCell的UITableViewCell, 在awakeFromNib中只写self。selectionStyle = .none

完整的例子:

class MyCell: UITableViewCell {
    
    override func awakeFromNib() {
        super.awakeFromNib()
        self.selectionStyle = .none
    }
    
}