2016-07-25 47 views
0

我有一個UITableView,它顯示了tvOS上的數據時間表。它是通過NSFetchedResultsController動態更新的。如何在數據更新期間保持UITableView的第一行焦點?

更新表格時,會在頂部添加新單元格。但是:先前選擇的單元格保持專注,但我需要的行爲是在數據更新後將焦點轉移到「最新」(即最上面)單元格。

我該如何做到這一點?

回答

0

不知道你的代碼是什麼樣的,但你可以創建一個屬性來跟蹤表是否正在更新。

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 
} 

有關如何以編程方式更新焦點的更多信息here

相關問題