我有一个UITableView
的公共模式,它带有一个辅助视图控制器,当选择了一行时,它会被推到顶部。为了在用户关闭第二个视图控制器并返回到表视图时为用户提供一些上下文,该第一个视图控制器具有以下功能:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let index = tableView.indexPathForSelectedRow {
tableView.deselectRow(at: index, animated: animated)
}
}
这会导致这种意想不到且令人讨厌的过渡,在这种过渡中,取消选择的单元会使其背景消失,然后又恢复为正常:
我希望它会从部分柔和的状态选择过渡到直接回到正常的黑暗状态。
(该单元非常在进行中-尚未完成)
遵循建议here并不是真正的选择,因为我确实希望保留上下文提示,并且整个单元格应该继续具有白色背景。
为响应Rico的问题,将单元格创建为.swift
和.xib
对,视图层次为:
Swift所做的很少-在两个标签上设置.textInsets
,在按钮上绘制显示指示器。
答案 0 :(得分:0)
我认为这是因为setSelected
的默认实现会删除单元格所有子视图的背景色。您可以做的是覆盖setSelected
和/或setHighlighted
并自己更新单元格。
这还允许您为选定的单元格创建自定义外观。
示例在选中时使用红色背景,而在未选中时使用白色:
override func setSelected(_ selected: Bool, animated: Bool) {
let animationDuration = animated ? 0.3 : 0
UIView.animate(withDuration: animationDuration) {
self.backgroundColor = highlighted ? UIColor.red : UIColor.white
}
}
答案 1 :(得分:0)
在deselecting
方法内调用row
而不是viewWillAppear(_:)
中的deselectRow(at:animated:)
,即{p>
tableView(_:didSelectRowAt:)
编辑1:
在func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
//Your rest of the code...
}
中,您需要{{1}中的viewWillAppear(_:)
在deselect
中设置为cell
的{{1}}中的UIView.animate(withDuration:animations:)
,即
animation