UICollectionViewDelegate
以下に、どのようなメソッドがあるのか書いておく。
選択されたセルの管理
選択された時にフックして呼び出されるメソッド群。コード上からセルを選択した場合には呼び出されないので注意。
table:選択の管理
メソッド タイミング 役割
_:shouldSelectItemAtIndexPath ユーザが選択しようとした時 Item が選択できるべきか?を設定する
_:didSelectItemAtIndexPath ユーザが選択に成功した時 Item が選択されたことを伝える
_:shouldDeselectItemAtIndexPath ユーザが選択解除しようとした時 Item が選択解除できるべきか?を設定する
_:didDeselectItemAtIndexPath ユーザが選択解除に成功した時 Item が選択解除されたことを伝える
セルのハイライトの管理
table:ハイライトの管理
メソッド タイミング 役割
_:shouldHighlightItemAtIndexPath タッチイベントを処理しようとした時 ハイライトすべきか?を設定する
_:didHighlightItemAtIndexPath タッチイベントを受け取った時 Item がハイライトされたことを伝える
_:didUnhighlightItemAtIndexPath タッチが外れた時? Item があんハイライトされたことを伝える
View の追加/削除をトラッキングする
table:追加/削除のトラッキング
メソッド タイミング 役割
_:willDisplayCell:_: セルがコンテンツに追加される直前 追加を検知する
_:willDisplaySupplementaryView:_: SupplementaryViewがコンテンツに追加される直前 追加を検知する
_:didEndDisplayingCell:_: セルがColleciotnViewからコンテンツに削除される直前 削除を検知する
_:didEndDisplayingSupplementaryView:_ SupplementaryViewがコンテンツから削除される直前 削除を検知する
レイアウトの変更をハンドリングする
カスタムなレイアウト変更が行える API が生えていて、例えば以下のようなことができるようになるようだ。
このようなレイアウト変更にフックして
カスタムな UICollectionViewTransitionLayout を返したい場合に実装する。このオブジェクトは、CollectionView のレイアウトの変更時の振る舞いをカスタマイズするのに利用できる。通常、レイアウト間の遷移は現在位置から遷移先の位置までの Item のアニメーションになる。カスタムな TransitionLayout object では、非線形なパスであったり、異なるタイミングのアルゴリズムであったり、タッチイベントの入力に応じた移動であったり、などをカスタマイズできる。 ユーザが Item を移動している最中に呼び出され、ユーザが置こうとした場所 (NSIndexPath) とは別の場所に Item を配置することができる。これは、ユーザが誤って想定していない場所に Item を移動してしまうこと (あるいは、されてしまうこと) を防ぐことに利用できる。 セルに対するアクションを管理する
ここでいうアクションとは、特定のセルに対してメニューを開いて行う操作のこと。
table:アクションの管理
メソッド タイミング 役割
_:shouldShowMenuForItemAtIndexPath: Item のタップ長押し時 編集用のメニューを表示するか?を設定する
_:canPreformAction:forItemAt:withSender: 上記のメソッドの後 編集メニューからコマンドを除去する
_:performAction:forItemAtIndexPath:withSender: メニューのアクション選択時 選択されたアクションを実行する
CollecitonView 内のフォーカスを管理する
フォーカスの制御は、ここでもできるし、セル自体の canBecomeForcused メソッドでも設定できる。UIKit のフォーカスエンジンは、まずセルの canBecomeForcused を実行してから、本プロトコルの canFocusItemAtIndexPath を呼び出す。 ここで設定をしていなくても、Item が選択可能になっていれば、同時にフォーカス可能になる。
WIP
特に、tvOS のフォーカスエンジンに関して学ぶなら下記が勉強になりそう。 Spring-Loading を制御する
参考