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


当前回答

场景- 1

如果你不想在表视图中选择某些特定的单元格,你可以在cellForRow函数中为这些单元格设置选择样式。

objective - c

cell.selectionStyle = UITableViewCellSelectionStyleNone;

斯威夫特4.2

cell.selectionStyle = .none

场景- 2

禁用整个表视图的选择:

objective - c

self.tableView.allowsSelection = false;

斯威夫特4.2

self.tableView.allowsSelection = false

其他回答

至少从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设置选择样式。

斯威夫特3,4和5

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

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

完整的例子:

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

对我来说,以下方法效果不错:

tableView.allowsSelection = false

这意味着didselectrow#将无法工作。也就是说,触摸表中的一行,本身不会有任何作用。(因此,很明显,永远不会有选中动画。)

(请注意,如果在单元格上有UIButton或任何其他控件,当然这些控件仍然可以工作。你碰巧在表格单元格上的任何控件,都与UITableView允许你使用didSelectRowAt#“选择一行”的能力完全无关。)

另一点需要注意的是:当UITableView处于编辑模式时,这是无效的。要在编辑模式下限制单元格选择,请使用如下代码:

tableView.allowsSelectionDuringEditing = false 

试着输入:

cell.selected = NO;

它将在需要时取消选择您的行。

在Swift3中…

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let r = indexPath.row
    print("clicked .. \(r)")
    tableView.cellForRow(at: indexPath)?.setSelected(false, animated: true)
}