ios – UICollectionView标头兼容视图

ios – UICollectionView标头兼容视图,第1张

概述我在故事板中构建了一个UICollectionView,并在视图控制器中实现了所有必需的数据源和委托方法.在故事板中,我检查了集合视图上的Section Header属性,并将标题视图的类设置为UICollectionResusableView的子类(在故事板中). 从这里开始,我通过故事板将两个UI元素拖到标题视图中 – 标签和分段控件: 执行程序时,标签出现在集合视图的标题视图中(不需要实际代 我在故事板中构建了一个UICollectionVIEw,并在视图控制器中实现了所有必需的数据源和委托方法.在故事板中,我检查了集合视图上的Section header属性,并将标题视图的类设置为UICollectionResusableVIEw的子类(在故事板中).

从这里开始,我通过故事板将两个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标头兼容视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1052729.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存