viewWithTag擷取subview規則詳解

來源:互聯網
上載者:User

擷取subview

  通常我們在view層級裡面對subView的操作可以通過兩種方式:1、保留一個subview的引用,然後在類中通過該引用對該subview進行操作,但是要注意在適當的位置添加記憶體維護的代碼,退出前手動釋放。2、設定subview的Tag,讓後在要使用的時候,通過viewWithTag擷取到相應的subview,這種方法比較簡潔,也不用自己去維護記憶體。

  ViewWithTag: 通常採用深度遍曆優先的演算法,返回第一個tag和給定Tag相等的subview。這就導致了一個當一個view的多個subview的tag相同的時候,我們通過該方法得到的view可能並不是自己想要的。

  下面通過一個小例子驗證一下,代碼如下:

SvTestViewTag.h

//
// SvTestViewTag.h
// SvUIViewSample
//
// Created by maple on 3/18/12.
// Copyright (c) 2012 smileEvday. All rights reserved.
//
// view根據Tag擷取subView的時候執行的是深度優先遍曆的演算法
// 返回第一個Tag和請求tag相等的子View
// 從subViews中尋找,最下層的優先找到

#import <UIKit/UIKit.h>

@interface SvTestViewWithTag : UIView

@end
SvTestViewWithTag.m

  例子中代碼建立的view的層次圖如下:

 

   例子中每個subview都是一個UILabel,而且設定了相應的內容。按鈕的響應函數的實現思路:首先隱藏所有類型為UILabel的subview(排除UIButton,因為button需要一直顯示),然後根據指定的Tag擷取到相應的subview,該subview及其superView的hidden屬性為NO。這樣就可以保證點擊按鈕的時候只顯示的是第一個tag和指定tag相等的subview。

  為了驗證viewWithTag擷取subview的原理:

  首先我在subview1中添加了兩個tag都為11的subview11和subview12。 運行程式可以,當我們點擊"Show Tag 11"按鈕的時候螢幕上將顯示“SubView11”,而非“SubView12”。同時不管你點擊幾次該按鈕,始終只顯示“SubView11”。這樣可以看出來同一層級中擷取subview時候尋找順序為index從小到大的原則,即位於相對下層的將首先被找到。

  其次我還在subview1中添加了tag均為13的subview13,同時向view中添加了tag也為13的subview2,運行程式點擊“Show Tag 13”按鈕,螢幕上將會顯示“SubView13”,而非“SubView2”。這可以驗證viewWithTag在搜尋的時候遵循深度優先遍曆的原則,即會首先尋找最下層的view並遞迴查詢其subview。

  綜上兩點我們可以看出來viewWithTag擷取subview的基本原則,即遵循深度優先,下層優先兩個原則。

 

PS:在測試的時候我也發現只要點擊過“Show Tag 13”以後,再點擊“Show Tag 11”將失去效果,不知道什麼原因,但是重啟程式就會恢複正常。

  期待你們的答案!

 

 

 

 

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.