美文网首页
关于viewWithTag的坑

关于viewWithTag的坑

作者: 黄_龙 | 来源:发表于2019-08-07 11:14 被阅读0次

    1、superview可以viewWithTag直接访问到subview中对应tag的控件,所以如果要标记一个控件时,同一个superview下的subview,注意不要有存在冲突的相同tag的控件,建议根据view级数来定义,比如superview级的tag用100X,子View用200x,孙view用300x,依次类推

    [view1 addsubview:view2]

    [view2 addsubview:label]

    label.tag=2000;

    则[view2  viewWithTag:2000]和[view1 viewWithTag:2000]都能访问到label;

    2、如果同一superview下存在相同的tag,会怎么样呢?

    如,在上面代码中再加一句:

    [view1 addsubview:button],且button.tag=2000,

    此时[view1 viewWithTag:2000],得到的仍旧为label,而不是自身下面button;

    viewWithTag得到的是最先设置tag为2000的那个控件(包含子view);网上大多说的,都是说优先从自身同等级查找,再找subview,都是想当然,没有经过代码验证的吧。

    另外,tag=0为所有view的默认的tag,所以如果我们要标记一个view后面需要用viewWithTag来选取它时,tag的值必须设置大一点(如>1000),据说苹果文档上提到过一次,tag值较小的,如0-100为苹果保留使用, 而0就是保留着给自己这个view使用的。对于其它的view, 如scrollview, 则更上面的0,1,2 都可能会是保留值。

    所以不妨定义 #define _initialTag  1000

    需要标记的view.tag=_initialTag+iTag;

    相关文章

      网友评论

          本文标题:关于viewWithTag的坑

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