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
}
プログラムでフォーカスを更新する方法の詳細については、こちらを参照してください。