从这里开始,我通过故事板将两个UI元素拖到标题视图中 – 标签和分段控件:
执行程序时,标签出现在集合视图的标题视图中(不需要实际代码),但分段控件不会.但是,当分段控件被拖动到典型的UIVIEw上时,它会显示并且可以 *** 作而不需要代码.即使通过IBOutlet中的代码实例化,也不会出现分段控件.
为什么分段控件在典型的UIVIEw中在集合视图的标题上不可见,为什么标签显示没有问题?
UPDATE
这是自定义标题视图的init方法,其中我尝试以编程方式添加分段控件(而不是在故事板中):
- (ID)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { _segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"One",@"Two",nil]]; [_segmentedControl setFrame:CGRectMake(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;}解决方法 我无法重现你的故事板问题,当我通过直接在故事板中拖动它来添加分段控件(不需要代码)时,它对我来说很好.至于以编程方式添加它的替代方法,这里的问题是当从故事板初始化视图时(在这种情况下),使用initWithCoder初始化方法(而不是initWithFrame初始化方法).因此,如果您重写该方法,在那里插入代码,它应该工作:
-(ID)initWithCoder:(NSCoder *)aDecoder{ self = [super initWithCoder:aDecoder]; if(self){ _segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"One",nil]]; _segmentedControl.bounds = CGRectMake(0,50); [_segmentedControl addTarget:self action:@selector(segmentedControlChanged:) forControlEvents:UIControlEventValueChanged]; [self addSubvIEw:_segmentedControl]; } return self;}
附:它不会影响这种特定情况,但你应该这样做:
galleryheader *headerVIEw = [cv dequeueReusableSupplementaryVIEwOfKind:kind withReuseIDentifIEr:@"headerVIEw" forIndexPath:indexPath];
代替:
galleryheader *headerVIEw = [cv dequeueReusableSupplementaryVIEwOfKind:UICollectionElementKindSectionheader withReuseIDentifIEr:@"headerVIEw" forIndexPath:indexPath];
因为它是要求正确类型视图的集合视图,所以您应该担心指定它!
编辑:我从故事板创建标题的步骤是:
>选择集合视图并勾选标记为Section header的框
>选择新创建的标题,然后在标识检查器中选择正确的类
>为标题部分指定唯一标识符
>拖动故事板中标题中的UI元素(我也更改了其背景颜色)
>最后在集合视图的数据源类中实现collectionVIEw:vIEwForSupplementaryElementOfKind:atIndexPath:方法
-(UICollectionReusableVIEw *)collectionVIEw:(UICollectionVIEw *)collectionVIEw vIEwForSupplementaryElementOfKind:(Nsstring *)kind atIndexPath:(NSIndexPath *)indexPath { return [self.collectionVIEw dequeueReusableSupplementaryVIEwOfKind:UICollectionElementKindSectionheader withReuseIDentifIEr:@"collectionVIEwheader" forIndexPath:indexPath]; }
如果你能发现你做了什么和我做了什么之间的任何区别,请告诉我!
总结以上是内存溢出为你收集整理的ios – UICollectionView标头兼容视图全部内容,希望文章能够帮你解决ios – UICollectionView标头兼容视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)