点击时会突出显示UITableViewCell

时间:2017-02-16 21:23:38

标签: ios swift xcode uitableview

我的VC中有一个UITableView,基本上我想要的是它的第一部分是不可点击的。但我无法使用isUserInteractionEnabled 因为我在本节的每一行内都有UISwitch。将selectionStyle设置为.none不会改变任何内容。我只能在界面检查器中选择No Selection来禁用这些行,但它会禁用整个表。我该怎么办?

修改

这是我的自定义单元格类

class CustomCell: UITableViewCell { override func setHighlighted(_ highlighted: Bool, animated: Bool) { if if highlighted { self.backgroundColor = ColorConstants.onTapColor } else { self.backgroundColor = .clear } } override func setSelected(_ selected: Bool, animated: Bool) { if selected { self.backgroundColor = ColorConstants.onTapColor } else { self.backgroundColor = .clear } } }

4 个答案:

答案 0 :(得分:4)

您可以将第一部分中所有selectionStyle的{​​{1}}设置为UITableViewCells,如下所示:

.none

然后,在func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "YOURIDENTIFIER") if indexPath.section == 0 { cell.selectionStyle = .none } else { cell.selectionStyle = .default } return cell } 方法中,您可以查看didSelectRowAtIndexPath()

if (indexPath.section != YOURSECTION)

答案 1 :(得分:0)

您必须在代码中为每个单元格设置选择样式。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = table.dequeue...

    if indexPath.section == 0 {
        cell.selectionStyle = .none
    } else {
        cell.selectionStyle = .default
    }

    return cell
}

答案 2 :(得分:0)

在cellForRowAt中添加cell.selectionStyle = .none

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
     if(indexPath.section == desiredSection){
        cell.selectionStyle = .none
        return cell;
     }

答案 3 :(得分:0)

因此,我找到了selectionStyle设置为.none的单元格突出显示的原因。由于我覆盖了setHighlighted UITableViewCell方法(如问题中所示),我添加了 shouldHighlightRowAt 方法,如下所示:

func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
    if indexPath.section == 0 {
        return false
    } else {
        return true
    }
}

感谢大家帮助我