I'm not able to reproduce your storyboard problem, it works just fine for me when i add the segmented control by dragging it directly in the storyboard (with no code required). As for your alternative way of adding it programmatically, the problem here is that when a view is initialized from the storyboard (as it is in this case), the initWithCoder
initializer method is used (not the initWithFrame
initializer method). Hence, if you override that method, inserting the code in there, it should work:
-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if(self){
_segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"One", @"Two", nil]];
_segmentedControl.bounds = CGRectMake(0, 0, 100, 50);
[_segmentedControl addTarget:self action:@selector(segmentedControlChanged:) forControlEvents:UIControlEventValueChanged];
[self addSubview:_segmentedControl];
}
return self;
}
P.S. It doesnt affect this specific case, but you should just do:
GalleryHeader *headerView = [cv dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"HeaderView" forIndexPath:indexPath];
instead of:
GalleryHeader *headerView = [cv dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"HeaderView" forIndexPath:indexPath];
As it is the collection view that will ask for the right kind of view, you should worry about specifying it!
EDIT: The steps i followed to create the header from storyboard are:
- Select the collection view and tick the box labelled Section Header
- Select the newly created header and select the right class in the identity inspector
- Give the header section a unique identifier
- Drag the UI elements in the header in the storyboard (i also changed its background color)
- Finally implement the
collectionView:viewForSupplementaryElementOfKind:atIndexPath:
method in your collection view's data source class
-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView
viewForSupplementaryElementOfKind:(NSString *)kind
atIndexPath:(NSIndexPath *)indexPath
{
return [self.collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"collectionViewHeader" forIndexPath:indexPath];
}
Let me know if you can spot any difference between what you did and what I did!