2016-07-25 3 views
0

私はtvOSのデータのタイムラインを示すUITableViewを持っています。それはNSFetchedResultsControllerを介して動的に更新されます。データの更新中にUITableViewの最初の行をフォーカスしたままにするにはどうすればよいですか?

テーブルが更新されると、新しいセルが先頭に追加されます。しかし、以前に選択したセルはフォーカスされたままですが、必要な動作は、データ更新後にフォーカスが「最新の」(つまり最上位の)セルに移動することです。

どうすればこの問題を解決できますか?

答えて

0

コードの外観はわかりませんが、テーブルがアクティブに更新されているかどうかを追跡するプロパティを作成できます。それが更新したり、いない場合は、あなたのNSFetchedResultsControllerDelegateセットに続いて

override var preferredFocusedView: UIView?{ 
    get { 
     if updating { 
      return self.tableView.cellForRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 0)) 
     } 
     return super.preferredFocusedView 
    } 
} 

var tableViewIsUpdating = false 

あなたが前に通常のフォーカスをしたいかどうかを判断するためか、テーブルビューの最初の行を返すためにこれを使用することができます

func controllerWillChangeContent(controller: NSFetchedResultsController){ 
    self.tableViewIsUpdating = true 
} 

func controllerDidChangeContent(controller: NSFetchedResultsController) { 
    self.setNeedsFocusUpdate() 
    self.updateFocusIfNeeded() 
    self.updating = false 
} 

フォーカスをプログラムで更新する方法については、hereを参照してください。

関連する問題