我的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
}
}
}
答案 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
}
}
感谢大家帮助我