indexPath
( )でセルを取得する方法がありUICollectionView cellForItemAtIndexPath:
ます。しかし、作成後にヘッダーやフッターなどの補助ビューの 1 つを取得する方法が見つかりません。何かアイデアはありますか?
4 に答える
アップデート
iOS 9以降では-[UICollectionView supplementaryViewForElementKind:atIndexPath:]
、インデックスパスごとに補足ビューを取得するために使用できます。
オリジナル
最善の策は、補足ビューへのインデックスパスをマッピングする独自の辞書を作成することです。collectionView:viewForSupplementaryElementOfKind:atIndexPath:
メソッドで、ビューを返す前にディクショナリにビューを配置します。collectionView:didEndDisplayingSupplementaryView:forElementOfKind:atIndexPath:
で、ディクショナリからビューを削除します。
最初に行う必要があるのは、コレクションビューの属性インスペクターの[セクションヘッダー]チェックボックスをオンにすることです。次に、セルをコレクションビューに追加したのと同じように、コレクションの再利用可能なビューを追加し、識別子を記述して、必要に応じてそのクラスを作成します。次に、メソッドを実装します。
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
そこから、cellForItemAtIndexPathで行ったのとまったく同じように実行します。また、コーディングしているヘッダーまたはフッターのどちらであるかを指定することも重要です。
if([kind isEqualToString:UICollectionElementKindSectionHeader])
{
Header *header = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"headerTitle" forIndexPath:indexPath];
//modify your header
return header;
}
else
{
EntrySelectionFooter *footer = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"entryFooter" forIndexPath:indexPath];
//modify your footer
return footer;
}
indexpath.sectionを使用して、これがどのセクションにあるかを確認します。HeaderとEntrySelectionFooterは、私が作成したUICollectionReusableViewのカスタムサブクラスであることに注意してください。