在呈现

时间:2017-04-26 21:34:31

标签: swift uitableview uicollectionview

我有一个UITableViewCell,我希望在呈现UIViewController时显示为。 vc.tableView.selectRow:atIndexPath理论上很不错,但它绕过了对单元格willSelectdidSelect的调用。

单元格有一个暴露的UIImageView setSelected切换,这是我试图在初始加载时显示的内容。

这里的任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

我将举例说明如何更改单元格的背景颜色并选择一个初始颜色,以便您可以按照并输入所需的代码:

UIViewController子类中,实现这些方法,这样就可以将逻辑放在选定和取消选择的状态中:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let selectedCell = tableView.cellForRow(at: indexPath)!
    selectedCell.backgroundColor = UIColor.purple
}

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
    let deselectedCell = tableView.cellForRow(at: indexPath)!
    deselectedCell.backgroundColor = UIColor.clear
}

在自定义UITableViewCell子类中,您必须覆盖isSelected属性,这是避免方法tableView.selectRow:atIndexPath绕过didSelect的关键:

class CustomTableViewCell: UITableViewCell {

    override var isSelected: Bool {        
        didSet {
            print(isSelected.description)
            self.selectionStyle = .none
            if isSelected{
                self.backgroundColor = UIColor.purple
            } else {
                self.backgroundColor = UIColor.clear
            }
        }
    }

}

最后,回到您的UIViewController子类,您可以在selectRow:atIndexPath方法中致电viewDidLoad,例如:

override func viewDidLoad(){
    super.viewDidLoad()
    tableView.selectRow(at: IndexPath(row: 0, section: 0) , animated: true, scrollPosition: UITableViewScrollPosition.none)
}