2016-08-05 51 views
1

Ich habe eine Test tvOS App über Xcode's tvOS "Tabbed Application" Option erstellt. In der ersten Registerkarte Controller auf eine UIcollectionView mit einigen einfachen Textzellen setzen.tvOS: Wie man den Fokuswechsel zwischen TabBar und UICollectionView handhabt und Abstürze verhindert

Wenn die App ausgeführt wird, ist es möglich, von der Registerkartenleiste in die UICollectionView zu wechseln, wo der Fokus akzeptiert wird und man sich ohne Probleme zwischen den Elementen der Ansicht bewegen kann.

jedoch zu versuchen, bis zu der Tab-Leiste von der UICollectionView stürzt zu bewegen zurück, um die App mit der folgenden Meldung:

kann nicht Wert vom Typ gegossen ‚UITabBarButton‘ (0x199b92828) auf ‚tabtest.itemCell‘ (0x1000153c8).

Ich nehme an, dies bedeutet, dass die Fokus-Engine nur die CollectionView "sieht" und dass ich Code hinzufügen muss, um den Sprung zurück zum UITabBarButton zu behandeln.

Ich habe hoch und niedrig nach Informationen darüber gesucht, wie mit der Fokusänderung umzugehen ist und nichts spezifisch gefunden. Da ich neu in der iOS/TVOS-Entwicklung bin, vermisse ich wahrscheinlich etwas Offensichtliches.

Kann mir bitte jemand erklären, wie man den Fokus zwischen der Tab-Leiste und der UICollectionView verwaltet? Hier

ist der Code, ich verwende zu handhaben für die UICollectionView konzentrieren:

// For Focus Engine 
func collectionView(collectionView: UICollectionView, didUpdateFocusInContext context: UICollectionViewFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) { 
} 

func collectionView(collectionView: UICollectionView, shouldUpdateFocusInContext context: UICollectionViewFocusUpdateContext) -> Bool { 
    if let cell: UICollectionViewCell = context.nextFocusedView as! itemCell{ 
     _ = self.collectionView.indexPathForCell(cell) 
    } 
    return true 
} 

Antwort

0

Die Antwort war zu erkennen, dass die "wenn Zelle..." wurde nicht benötigt. Durch das Hinzufügen des Folgenden wurde es richtig funktioniert.

// für Fokus Motor

func collectionView(collectionView: UICollectionView, didUpdateFocusInContext context: UICollectionViewFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) { 
} 

func collectionView(collectionView: UICollectionView, canFocusItemAtIndexPath indexPath: NSIndexPath) -> Bool { 
    return true 
} 

func collectionView(collectionView: UICollectionView, shouldUpdateFocusInContext context: UICollectionViewFocusUpdateContext) -> Bool { 
    return true 
} 

func collectionView(collectionView: UICollectionView, shouldSlectItemAtIndexPath context: UICollectionViewFocusUpdateContext) -> Bool { 
    return true 
} 
0

Sie benötigen keinen Code hinzufügen für Fokus, hier zu arbeiten. Die Fehlermeldung, die Sie in der Konsole sehen, ist wegen Ihrer as! itemCell Umwandlung: Wenn sich der Fokus von der Sammlungsansicht bis zur Registerkartenleiste bewegt, ist context.nextFocusedView eine UITabBarButton keine Sammelansicht Zelle. Ich weiß ehrlich gesagt nicht genug Swift, um sicher zu sein, aber ich denke, wenn Sie die ! entfernen, dann sollten Sie aufhören, diesen Absturz zu sehen?

+0

Verspäteter Dank Justin. Ich habe es schließlich herausgefunden, indem ich endlich verstanden habe, dass der Code einfach falsch ist. Die "wenn Zelle:..." ist unnötig und führte zum Absturz. –