I've constructed an UICollectionView
in a storyboard and implemented all of its required data source and delegate methods in the view controller. In the storyboard, I checked the Section Header
property on the collection view and set the header view's class to a subclass of UICollectionResusableView
(in the storyboard).
From here, I dragged in two UI elements onto the header view via the storyboard--a label and a segmented control:
When the program is executed, the label appears in the header view of the collection view (with no actual code required), but the segmented control does not. However, when a segmented control is dragged onto a typical UIView
, it displays and is manipulatable with no code required. Even when instantiated through code in an IBOutlet
, the segmented control does not appear.
Why is the segmented control not visible on the collection view's header while it is in a typical UIView
, and why does the label display without issue?
UPDATE
Here is the init method for the custom header view, in which I attempted adding the segmented control programmatically (as opposed to in the storyboard):
- (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;
}
As requested, here is the -[UICollectionReusableView viewForSupplementaryElementOfKind:]
method in the main view controller:
- (UICollectionReusableView *)collectionView:(UICollectionView *)cv viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
GalleryHeader *headerView = [cv dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView" forIndexPath:indexPath];
return headerView;
}