关于view的tag复用的问题

关于view的tag复用的问题,也许对于一些人来说,没有踩过这个坑,但是我踩过好几次。对于在一个view上创建几个子类,如果是动态创建的话,最好的方式就是用tag值进行复用。

比如:

UIButton*btn = (UIButton*)[self.scrollView viewWithTag:kBaseButtonTag+ index];

if(!btn){

btn = [[UIButton allc]initWithType:buttonType];

btn.tag=kBaseButtonTag+ index;

}

[btn setFrame:CGRectMake(kMarginHorizon+ index *kItemGap+ index * btnWidth,kMarginVertical, btnWidth,kItemHeight)];

[btn refreshViewWithGroupCategoryItem:groupCategoryItem withTitleBackGroundImage:nil];

[btn addTarget:selfaction:@selector(buttonClickedWithSender:)forControlEvents:UIControlEventTouchUpInside];

[self.scrollView addSubview:btn];

之前是这么写的,但是对于根据个数动态创建view来说,这个代码还不是完善的。当第二次的数据比第一次少的时候,会有多于的view展示,所以在每次来新的数据时,记得重置view的subviews。例如:

- (void)resetScrollViewWithTypeArray:(NSArray*)groupTypeArray

{

NSInteger subCount =self.scrollView.subviews.count;

NSInteger newCount = groupTypeArray.count;

if(newCount > subCount)

{

[self.scrollView.subviews enumerateObjectsUsingBlock:^(__kindof UIView*_Nonnull obj,NSUInteger idx,BOOL*_Nonnull stop) {

if([obj isKindOfClass:[UIButton class]])

{

obj.hidden=NO;

}

}];

}else if(newCount < subCount)

{

for(NSInteger index = newCount ; index < subCount; index ++)

{

UIButton*btn = (UIButton*)[self.scrollView viewWithTag:kBaseButtonTag+ index];

btn.hidden=YES;

}

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容