2016-11-25 11 views
0

私はリンゴのテレビアプリケーションに取り組んでいます。私のアプリでは、私はコレクションビューを持つ画面を作った。その場合、コレクションビューのセルでフォーカスを移動できますが、コレクションビューのセルにあるボタンにフォーカスを移動できないので、誰でもこの問題を解決するのに役立ちますか?tvosアプリケーションのcollectionviewセルのボタンでフォーカスを移動するには?

この回答を知っている人は、私に答えてください。

+0

フォーカスの意味は? – Lion

+0

フォーカスは、フォーカスを移動するたびにボタンをクリックすることができます。 –

+0

コレクションビューのセルのインタラクションを使用する方がよい。 –

答えて

2

のおかげで、私はcollectionViewCellサブクラスのメソッドの下に追加することで、この問題を解決することができています。 enter link description here:CollectionViewCellサブクラスでは

override var preferredFocusEnvironments: [UIFocusEnvironment]{ 
    // Condition 
} 
override func shouldUpdateFocus(in context: UIFocusUpdateContext) -> Bool { 
    // Condition 
} 
override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) { 
    // Condition 
} 

このリンクで詳細を見ることができます

+0

これは期待どおりに機能していません。最初は最初のボタンをフォーカスし、次に2番目のボタンを押してから最後にセルを... – mgyky

1

私はこのページがあなたが望むものを達成するために参考になると思います。 https://developer.apple.com/library/content/documentation/General/Conceptual/AppleTV_PG/WorkingwiththeAppleTVRemote.html#//apple_ref/doc/uid/TP40015241-CH5-SW4

フォーカスエンジンが次のフォーカスを取得するオブジェクトを決定する方法をよく説明しています。以下ここabove link.

におけるステップによって優れた説明ステップは焦点が決定されるかもしれない方法を示す例である。

  1. フォーカスエンジンは、そのルート・ビュー・コントローラのpreferredFocusedViewを返し、そのpreferredFocusedView、 のルートウィンドウを要求 オブジェクト。
  2. ルートビューコントローラ(タブビューコントローラ)は、その ビューコントローラのpreferredFocusedViewオブジェクトを返します。
  3. selectビューコントローラは、preferredFocusedViewメソッドをオーバーライドして特定のUIButtonインスタンスを返します。
  4. UIButtonインスタンスはself(デフォルト)を返し、フォーカス可能であるため、次のフォーカスされたビューとしてフォーカスエンジンによって選択されます。

UIViewまたはUIViewControllerのpreferredFoucsedViewプロパティをオーバーライドする必要があります。

override weak var preferredFocusedView: UIView? { 
    if someCondition { 
     return theViewYouWant 
    } else { 
     return defaultView 
    } 
} 

Slayter's答え

関連する問題