我正在尝试使用以下代码突出显示tableview中的第一个单元格:
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if indexPath.row == 0 {
cell.layer.borderWidth = 0
cell.layer.borderColor = nil
cell.layer.borderWidth = 2
cell.layer.borderColor = UIColor(red:0.38, green:0.69, blue:0.16, alpha:1.0).cgColor
}
}
一切似乎都好。但是当我点击某个单元格时,转到另一个viewController,然后返回到我的单元格,不知何故第二个单元格已经突出显示。所以我多次点击我的单元格,发现从另一个视图控制器返回tableview后,下一个单元格已经突出显示(在N点击后,我的所有单元格都会突出显示为边框)。
我应该如何修改我的代码以突出显示第一个CELL,即使我去另一个控制器并返回我的单元格?
答案 0 :(得分:2)
细胞被重复使用。为给定条件设置任何属性时,必须始终为所有其他条件重置该属性。
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if indexPath.row == 0 {
cell.layer.borderWidth = 2
cell.layer.borderColor = UIColor(red:0.38, green:0.69, blue:0.16, alpha:1.0).cgColor
} else {
cell.layer.borderWidth = 0
cell.layer.borderColor = nil
}
}
答案 1 :(得分:1)
你必须实现else
分支并在那里添加单元格的默认渲染。
这样的事情:
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if indexPath.row == 0 {
cell.layer.borderWidth = 2
cell.layer.borderColor = UIColor(red:0.38, green:0.69, blue:0.16, alpha:1.0).cgColor
} else {
cell.layer.borderWidth = 0
cell.layer.borderColor = nil
}
}
答案 2 :(得分:1)
此代码不应该在视图控制器中。创建UITableViewCell
...
class myCell: UITableViewCell {
var hasBorder = false {
didSet {
layer.borderWidth = hasBorder ? 2 : 0
layer.borderColor = hasBorder ? UIColor(red:0.38, green:0.69, blue:0.16, alpha:1.0).cgColor : nil
}
}
}
然后在您的cellForRow atIndexPath
方法中:
cell.hasBorder = indexPath.row == 0