2016-06-25 28 views
0

Graben durch die documentation, aber ich kann nicht scheinen, einen Weg zu finden, um das folgende zu erreichen.UISplitViewController auf tvOS - Deaktivieren Swipe to Detailansicht Controller

Meine SplitViewController lädt mit einem UITableView als Master, aber ich kann einfach die Apple TV-Fernbedienung nach rechts wischen, um in die Detailansicht zu gelangen. Wie kann ich diese Geste deaktivieren, sodass ich sie so einrichten kann, dass die Detailansicht erst dann aktiviert wird, wenn eine Auswahl in der Masteransicht getroffen wurde?

Aus der Dokumentation, var presentsWithGesture: Bool klingt wie das Richtige zu tun, aber das ist nur für Ansichten, die bereits ausgeblendet sind. Meine Ansichten werden nebeneinander angezeigt und beide sind sichtbar. Irgendwelche Ideen?

Antwort

2

Sie eine Eigenschaft auf Ihrem Master-View-Controller erstellen können, um zu verfolgen, wenn Sie in der Detailansicht Controller konzentrieren wollen oder nicht, wie:

var presentDetail = false 

Dann sollten Sie shouldUpdateFocusInContext überschreiben, um nicht den Fokus Updates zu erlauben Überschrift zu das Recht.

override func shouldUpdateFocusInContext(context: UIFocusUpdateContext) -> Bool { 
     if context.focusHeading == .Right { return false } 
     return super.shouldUpdateFocusInContext(context) 
    } 

Als nächstes müssen Sie die preferredFocusedView außer Kraft zu setzen:

override var preferredFocusedView: UIView?{ 
    if self.presentDetail { 
     self.presentDetail = false 
     guard let vc = self.splitViewController?.viewControllers[1] else { return nil } 
     return vc.view 
    } 
    return self.tableView 
} 

Normalerweise wir unsere Tableview zurückkehren werden, aber wenn wir den Fokus auf die Detailansicht Controller verschieben wollen wir seine Ansicht zurückkehren.

Schließlich setzen wir didSelectRowAtIndexPath:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     if let vc = self.splitViewController?.viewControllers[1] { 
      self.presentDetail = true 

      self.setNeedsFocusUpdate() 
      self.updateFocusIfNeeded() 

      vc.setNeedsFocusUpdate() 
      vc.updateFocusIfNeeded() 
     } 
    } 

Wo wir Updates auf den Fokus-Engine auf unsere Master-View-Controller und Detailansicht Controller anfordern.