我有一个UITableViewCell,我希望在呈现UIViewController时显示为。 vc.tableView.selectRow:atIndexPath
理论上很不错,但它绕过了对单元格willSelect
和didSelect
的调用。
单元格有一个暴露的UIImageView setSelected
切换,这是我试图在初始加载时显示的内容。
这里的任何帮助将不胜感激。谢谢!
答案 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)
}