我有一个UITableView
在 tvOS 上显示数据时间表的文件。它通过NSFetchedResultsController
.
更新表格时,顶部会添加新单元格。但是:先前选择的单元格仍然保持焦点,但我需要的行为是在数据更新后焦点转移到“最新”(即最顶层)单元格。
我怎样才能做到这一点?
我有一个UITableView
在 tvOS 上显示数据时间表的文件。它通过NSFetchedResultsController
.
更新表格时,顶部会添加新单元格。但是:先前选择的单元格仍然保持焦点,但我需要的行为是在数据更新后焦点转移到“最新”(即最顶层)单元格。
我怎样才能做到这一点?
不确定您的代码是什么样的,但您可以创建一个属性来跟踪表是否正在主动更新。
var tableViewIsUpdating = false
您可以使用它来确定您是否想要正常焦点之前或返回表格视图的第一行:
override var preferredFocusedView: UIView?{
get {
if updating {
return self.tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0))
}
return super.preferredFocusedView
}
}
然后在你的NSFetchedResultsControllerDelegate
集合中是否更新:
func controllerWillChangeContent(controller: NSFetchedResultsController){
self.tableViewIsUpdating = true
}
func controllerDidChangeContent(controller: NSFetchedResultsController) {
self.setNeedsFocusUpdate()
self.updateFocusIfNeeded()
self.updating = false
}
您可以在此处找到有关如何以编程方式更新焦点的更多信息。