8

標準の水平レイアウトのコレクション ビューがあります。ビュー コントローラを表示してから閉じると、最後にフォーカスされたセルが最初のセルではなかったにもかかわらず、コレクション ビューが最初のセルにフォーカスをリセットしました。

設定しました

self.collectionView.remembersLastFocusedIndexPath = YES;

奇妙なのは、ナビゲーション コントローラーでビュー コントローラーをプッシュした場合にのみ発生することです。

だから私がするなら

[self.navigationController pushViewController:controller animated:YES];

し、却下すると、remembersLastFocusedIndexPath正しく動作しません。

ただし、次の場合:

[self presentViewController:controller animated:YES completion:nil];

その後、期待どおりに動作します。

ナビゲーションコントローラーを介して機能しない理由は何ですか?

4

4 に答える 4

7

私にとってうまくいったのは、viewControllerのpreferredFocusViewがコレクションビューであることを確認することでした:

override weak var preferredFocusedView: UIView? {
    return collectionView
}

この後は、LastFocusedIndexPath が機能するようです。

于 2016-01-08T03:44:52.030 に答える
1

デフォルトでは、システムは位置を記憶しています。この問題は、おそらくremembersLastFocusedIndexPathfalse に設定して修正する必要があります。

UICollectionViewDelegateメソッド を実装することもできます。func indexPathForPreferredFocusedViewInCollectionView(collectionView: UICollectionView) -> NSIndexPath?

ドキュメントには次のように記載されています。

このデリゲート メソッドの機能は、UIFocusEnvironment プロトコルで UICollectionView クラスの preferredFocusedView メソッドをオーバーライドすることと同じです。コレクション ビューの remembersLastFocusedIndexPath メソッドが YES に設定されている場合、このメソッドは、コレクション ビューが初めてフォーカスされたときにフォーカスされるインデックス パスを定義します。

ただし、問題については、remembersLastFocusedIndexPathfalse に設定すると修正されます。

于 2015-10-01T12:06:13.320 に答える
0

同様の動作を実装することもできます。最後にフォーカスされたセルを覚えておいてください

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

この情報を

func collectionView(collectionView: UICollectionView, canFocusItemAtIndexPath indexPath: NSIndexPath) -> Bool
于 2016-08-11T07:32:36.290 に答える