2015-11-21 9 views
5

UIViewControllerがある場合、この `preferredFocusedViewを使用すると、tvOSに焦点を当てたビューを作成できますが、UICollectionViewの最初のセルをフォーカスするのはどうでしょうか?それ、どうやったら出来るの?UICollectionViewの最初のセルをtvOSにフォーカスさせる

私はUICollectionViewCellサブクラスを作成し、成功せずに方法

- (UIView *)preferredFocusedView { 
    return ([self ifThisIsTheFirstCell]) ? self : nil; 
} 

を持ってしようとしています。

これを行う方法はありますか?

答えて

8

「優先焦点は」概念的動作方法はの「連鎖」があるということですアプリケーションのウィンドウから始まり、ビューコントローラとビューを経て、チェーンがフォーカス可能なビューで終了するまで、オブジェクトを返します。最終的には、アプリの起動時に焦点を合わせるか、フォーカスをリセットする必要があるか(たとえば、現在フォーカスのあるビューがビュー階層から削除された場合、UIKitはフォーカスを合わせるために別のビューを選択する必要があります) 。 preferredFocusedViewメソッドは、チェーンの定義方法です。

たとえば、UIWindowは、rootViewControllerの好ましいフォーカスされたビューを返すためにpreferredFocusedViewを実装します。抽象的で、tはこのような何かをやっている:

- (UIView *)preferredFocusedView { 
    return [self.rootViewController preferredFocusedView]; 
} 

UIViewControllerはそれがview財産だ返すようにpreferredFocusedViewを実装しています。 UIViewはそれ自身を返します。

ただし、UICollectionViewpreferredFocusedViewを別様に実装しています。最も簡単な場合は、最初のセルを返します。それで、あなたが望むものの一部がすでにあなたのために行われています。フォーカスがコレクション内の最初のセルに移動していない場合は、「チェーン」内の上位のものが問題です。

あなたのビューコントローラのコレクションビューは、ビューコントローラのviewプロパティではない場合、あなたは、コレクション自身にフォーカスチェーンをガイドする必要があります。そこから

// in your view controller: 
- (UIView *)preferredFocusedView { 
    return myCollectionView; 
} 

、コレクションビューます特定の細胞にチェーンを導く。あなたがこの方法を使用することができます

+3

今話しています。 Appleがなぜあなたのような人々を雇ってドキュメンテーションを書くことがないのだろうか?代わりに、彼らは執筆を嫌う人を書いています。完璧!ありがとう! – SpaceDog

+0

一部のサービスからデータを取得する場合は、[self setNeedsFocusUpdate]と書くことを忘れないでください。コレクションビューの後にreloadData/reloadSectionステートメント。 – NaXir

+0

コレクションビューでどのセルがフォーカスされているかをプログラムで変更する方法についてのガイダンスはありますか? – vtcajones

-1
いくつかのケースではあなたがtrueを返すようにしたくない場合は、このUICollectionViewDelegate方法と必要なロジックを追加する必要があります

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

私が代わりにこのメソッドを持っていますが、今、私はどのように焦点を当ててください細胞? – SpaceDog

+0

「特定の」セルに焦点を当てる方法を尋ねていますか?あなたの質問は、 "最初のセル"と言います。私のアプリケーションで上記のメソッドは、最初のセルに焦点を当てています。しかし、あなたの視点に複数のフォーカス可能なアイテムがある場合、別の解決策が必要になるかもしれません。 – earthtrip

+0

いいえ、私は最初のセルを意味します。これは何らかの理由で私のために働いていません。ところで、最初のセルに何も言及していない場合、なぜこのメソッドが機能するのでしょうか?私は自分自身をよく説明しているかどうかはわかりません。私が欲しいのは、CollectionViewControllerが表示され、最初のセルがフォーカスされているということです(フォーカスされたセルがtvOSにあるはずです)。 – SpaceDog

0

、アップルあなたが好きなindexPathを返すことができ

func indexPathForPreferredFocusedView(in collectionView: UICollectionView) -> IndexPath? { 
    return IndexPath(item: self.datasourceArray.count, section: 0) 
} 

documentation ..例えば

IndexPath(item: 0, section: 0)

関連する問題