ストーリーボードに を構築しUICollectionView
、必要なデータ ソースとデリゲート メソッドをすべてビュー コントローラーに実装しました。ストーリーボードで、コレクション ビューのプロパティを確認しSection Header
、ヘッダー ビューのクラスをUICollectionResusableView
(ストーリーボードで) のサブクラスに設定しました。
ここから、ストーリーボードを介して 2 つの UI 要素 (ラベルとセグメント化されたコントロール) をヘッダー ビューにドラッグします。
プログラムが実行されると、コレクション ビューのヘッダー ビューにラベルが表示されますが (実際のコードは必要ありません)、セグメント化されたコントロールには表示されません。ただし、セグメント化されたコントロールを通常UIView
の にドラッグすると、表示され、コードを必要とせずに操作できます。のコードでインスタンス化してもIBOutlet
、セグメント化されたコントロールは表示されません。
セグメント化されたコントロールが通常のコレクション ビューのヘッダーにUIView
表示されないのはなぜですか? また、ラベルが問題なく表示されるのはなぜですか?
アップデート
カスタム ヘッダー ビューの init メソッドを次に示します。ここでは、セグメント化されたコントロールをプログラムで (ストーリーボードではなく) 追加しようとしました。
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
_segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"One", @"Two", nil]];
[_segmentedControl setFrame:CGRectMake(0, 0, 100, 50)];
[_segmentedControl addTarget:self action:@selector(segmentedControlChanged:) forControlEvents:UIControlEventValueChanged];
[self addSubview:_segmentedControl];
}
return self;
}
リクエストに応じ-[UICollectionReusableView viewForSupplementaryElementOfKind:]
て、メイン ビュー コントローラーのメソッドを次に示します。
- (UICollectionReusableView *)collectionView:(UICollectionView *)cv viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
GalleryHeader *headerView = [cv dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView" forIndexPath:indexPath];
return headerView;
}