2016-07-25 2 views
0

Ich habe eine UITableView, die eine Zeitleiste der Daten auf TVOS darstellt. Es wird dynamisch über eine NSFetchedResultsController aktualisiert.Wie kann ich die erste Zeile eines UITableView während einer Datenaktualisierung fokussiert halten?

Wenn die Tabelle aktualisiert wird, werden oben neue Zellen hinzugefügt. Allerdings: Die zuvor ausgewählte Zelle bleibt fokussiert, aber das Verhalten, das ich brauche, ist, dass der Fokus nach der Datenaktualisierung auf die "neueste" (d.h. oberste) Zelle wechselt.

Wie kann ich das erreichen?

Antwort

0

Nicht sicher, wie Ihr Code aussieht, aber Sie können eine Eigenschaft erstellen, um zu verfolgen, ob die Tabelle aktiv aktualisiert wird.

var tableViewIsUpdating = false 

Sie diese verwenden können, um festzustellen, ob Sie den normalen Fokus wollen vor oder die erste Zeile der Tabelle Ansicht zurückzukehren:

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

Dann in Ihrem NSFetchedResultsControllerDelegate Satz, wenn es die Aktualisierung oder nicht:

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

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

Sie finden weitere Informationen here zum programmgesteuerten Fokus aktualisieren.

Verwandte Themen