【原转】使用获取subview获取子view
通常我們?cè)趘iew層級(jí)里面對(duì)subView的操作可以通過(guò)兩種方式:1、保留一個(gè)subview的引用,然后在類中通過(guò)該引用對(duì)該subview 進(jìn)行操作,但是要注意在適當(dāng)?shù)奈恢锰砑觾?nèi)存維護(hù)的代碼,退出前手動(dòng)釋放。2、設(shè)置subview的Tag,讓后在要使用的時(shí)候,通過(guò) viewWithTag獲取到相應(yīng)的subview,這種方法比較簡(jiǎn)潔,也不用自己去維護(hù)內(nèi)存。
說(shuō)直白點(diǎn),就是父View通過(guò)tag獲取到子View,格式是:[父View viewWithTag:tag號(hào)碼];如下圖:[view viewWithTag:13].text獲取到subView2的內(nèi)容。就是這么簡(jiǎn)單。父類對(duì)子類下手
ViewWithTag: 通常采用深度遍歷優(yōu)先的算法,返回第一個(gè)tag和給定Tag相等的subview。這就導(dǎo)致了一個(gè)當(dāng)一個(gè)view的多個(gè)subview的tag相同的時(shí)候,我們通過(guò)該方法得到的view可能并不是自己想要的。
例子中代碼創(chuàng)建的view的層次圖如下:
?
例子中每個(gè)subview都是一個(gè)UILabel,而且設(shè)置了相應(yīng)的內(nèi)容。按鈕的響應(yīng)函數(shù)的實(shí)現(xiàn)思路:首先隱藏所有類型為UILabel的 subview(排除UIButton,因?yàn)閎utton需要一直顯示),然后根據(jù)指定的Tag獲取到相應(yīng)的subview,該subview及其 superView的hidden屬性為NO。這樣就可以保證點(diǎn)擊按鈕的時(shí)候只顯示的是第一個(gè)tag和指定tag相等的subview。
為了驗(yàn)證viewWithTag獲取subview的原理:
首先我在subview1中添加了兩個(gè)tag都為11的subview11和subview12。 運(yùn)行程序可以,當(dāng)我們點(diǎn)擊"Show Tag 11"按鈕的時(shí)候屏幕上將顯示“SubView11”,而非“SubView12”。同時(shí)不管你點(diǎn)擊幾次該按鈕,始終只顯示“SubView11”。這樣 可以看出來(lái)同一層級(jí)中獲取subview時(shí)候查找順序?yàn)閕ndex從小到大的原則,即位于相對(duì)下層的將首先被找到。
其次我還在subview1中添加了tag均為13的subview13,同時(shí)向view中添加了tag也為13的subview2,運(yùn)行程序 點(diǎn)擊“Show Tag 13”按鈕,屏幕上將會(huì)顯示“SubView13”,而非“SubView2”。這可以驗(yàn)證viewWithTag在搜索的時(shí)候遵循深度優(yōu)先遍歷的原則, 即會(huì)首先查找最下層的view并遞歸查詢其subview。
綜上兩點(diǎn)我們可以看出來(lái)viewWithTag獲取subview的基本原則,即遵循深度優(yōu)先,下層優(yōu)先兩個(gè)原則。
轉(zhuǎn)載于:https://www.cnblogs.com/wengzilin/archive/2012/03/22/2411306.html
總結(jié)
以上是生活随笔為你收集整理的【原转】使用获取subview获取子view的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 分区
- 下一篇: 21个营销机构网站设计案例