关于view的tag复用的问题

作者: 雪儿的小木屋 | 来源:发表于2016-07-14 20:31 被阅读230次

    关于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;

    }

    }

    }

    相关文章

      网友评论

        本文标题:关于view的tag复用的问题

        本文链接:https://www.haomeiwen.com/subject/zmzejttx.html