在uitableview中突出显示第一个单元格的问题,IOS

时间:2017-02-20 16:14:08

标签: ios swift uitableview

我正在尝试使用以下代码突出显示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,即使我去另一个控制器并返回我的单元格?

3 个答案:

答案 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