1、superview可以viewWithTag直接訪問到subview中對應tag的控件遗锣,所以如果要標記一個控件時购岗,同一個superview下的subview荆隘,注意不要有存在沖突的相同tag的控件,建議根據(jù)view級數(shù)來定義鹤树,比如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)单雾;網(wǎng)上大多說的赚哗,都是說優(yōu)先從自身同等級查找,再找subview硅堆,都是想當然蜂奸,沒有經(jīng)過代碼驗證的吧。
另外硬萍,tag=0為所有view的默認的tag,所以如果我們要標記一個view后面需要用viewWithTag來選取它時围详,tag的值必須設置大一點(如>1000)朴乖,據(jù)說蘋果文檔上提到過一次祖屏,tag值較小的,如0-100為蘋果保留使用买羞, 而0就是保留著給自己這個view使用的袁勺。對于其它的view, 如scrollview, 則更上面的0,1,2 都可能會是保留值。
所以不妨定義 #define _initialTag? 1000
需要標記的view.tag=_initialTag+iTag;