IOS之UIView的tag學習,iosuiviewtag

來源:互聯網
上載者:User

IOS之UIView的tag學習,iosuiviewtag

tag是UIView的一個屬性,而且要求tag值唯一。父視圖可以通過tag來找到一個子視圖

1 UIView *redView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.window.frame), CGRectGetHeight(self.window.frame)/2)];2 redView.backgroundColor = [UIColor redColor];3 redView.tag = 1000;4 [self.window addSubview:redView];5 6 UIView *getView = [self.window viewWithTag:1000];tag用法

下面來看下幾種需要注意的錯誤樣本

由於範例程式碼有點多,怕麻煩的童鞋可以跳到最後的結論部分(最好把錯誤樣本4的代碼看一下)

一,view下有tag值相同的兩個subview

1 UIView *redView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.window.frame), CGRectGetHeight(self.window.frame)/2)]; 2 redView.backgroundColor = [UIColor redColor]; 3 redView.tag = 1000; 4 5 UIView *yellowView = [[UIView alloc]initWithFrame:CGRectMake(0, CGRectGetHeight(self.window.frame)/2, CGRectGetWidth(self.window.frame), CGRectGetHeight(self.window.frame)/2)]; 6 yellowView.backgroundColor = [UIColor yellowColor]; 7 yellowView.tag = 1000; 8 9 [self.window addSubview:yellowView];10 [self.window addSubview:redView];11 12 UIView *getView = [self.window viewWithTag:1000];13 [getView setBackgroundColor:[UIColor whiteColor]];錯誤樣本1

結果是yellowView的背景被改變了,說明這種情況下會取得父視圖載入的第一個tag是1000的子視圖。

 

二,父視圖取得子視圖的子視圖。

1 UIView *redView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.window.frame), CGRectGetHeight(self.window.frame)/2)]; 2 redView.backgroundColor = [UIColor redColor]; 3 redView.tag = 1000; 4 5 UIView *yellowView = [[UIView alloc]initWithFrame:CGRectMake(0, CGRectGetHeight(self.window.frame)/2, CGRectGetWidth(self.window.frame), CGRectGetHeight(self.window.frame)/2)]; 6 yellowView.backgroundColor = [UIColor yellowColor]; 7 yellowView.tag = 1001; 8 9 UIView *blueView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];10 blueView.backgroundColor = [UIColor blueColor];11 blueView.tag = 1002;12 13 UIView *greenView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];14 greenView.backgroundColor = [UIColor greenColor];15 greenView.tag = 1003;16 17 [redView addSubview:blueView];18 [yellowView addSubview:greenView];19 20 21 [self.window addSubview:yellowView];22 [self.window addSubview:redView];23 24 UIView *getView = [self.window viewWithTag:1003];25 [getView setBackgroundColor:[UIColor whiteColor]];樣本2

結果是greenView背景被改變了,說明這個是可行的。

 

三,取存在但不是自己子視圖的視圖

將樣本2中的倒數第二句代碼改為   

UIView *getView = [redView viewWithTag:1003];

結果是greenView的背景沒有被改變,說明這是行不通的。

 

四,別的視圖中的子視圖和本視圖的子視圖有相同的tag值

1 UIView *redView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.window.frame), CGRectGetHeight(self.window.frame)/2)]; 2 redView.backgroundColor = [UIColor redColor]; 3 redView.tag = 1000; 4 5 UIView *yellowView = [[UIView alloc]initWithFrame:CGRectMake(0, CGRectGetHeight(self.window.frame)/2, CGRectGetWidth(self.window.frame), CGRectGetHeight(self.window.frame)/2)]; 6 yellowView.backgroundColor = [UIColor yellowColor]; 7 yellowView.tag = 1001; 8 9 UIView *blueView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];10 blueView.backgroundColor = [UIColor blueColor];11 blueView.tag = 1002;12 13 UIView *greenView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];14 greenView.backgroundColor = [UIColor greenColor];15 greenView.tag = 1002;16 17 [redView addSubview:blueView];18 [yellowView addSubview:greenView];19 20 21 [self.window addSubview:yellowView];22 [self.window addSubview:redView];23 24 UIView *getView = [redView viewWithTag:1002];25 [getView setBackgroundColor:[UIColor whiteColor]];錯誤樣本3

結果來看還可以

 

五,greenView和redView的tag值相同

1 UIView *redView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.window.frame), CGRectGetHeight(self.window.frame)/2)]; 2 redView.backgroundColor = [UIColor redColor]; 3 redView.tag = 1000; 4 5 UIView *yellowView = [[UIView alloc]initWithFrame:CGRectMake(0, CGRectGetHeight(self.window.frame)/2, CGRectGetWidth(self.window.frame), CGRectGetHeight(self.window.frame)/2)]; 6 yellowView.backgroundColor = [UIColor yellowColor]; 7 yellowView.tag = 1001; 8 9 UIView *blueView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];10 blueView.backgroundColor = [UIColor blueColor];11 blueView.tag = 1002;12 13 UIView *greenView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];14 greenView.backgroundColor = [UIColor greenColor];15 greenView.tag = 1000;16 17 [redView addSubview:blueView];18 [yellowView addSubview:greenView];19 20 21 [self.window addSubview:yellowView];22 [self.window addSubview:redView];23 24 UIView *getView = [self.window viewWithTag:1000];25 [getView setBackgroundColor:[UIColor whiteColor]];錯誤樣本4

結果是greenView的背景色被改變了

 

最後說一下結論

由以上的代碼可以推出,父視圖通過tag取得子視圖的順序是深度優先,也就是先查看自己的第一個子視圖,然後查看第一個子視圖的所有子視圖

tag值,直到第一個子視圖下的所有子視圖搜尋完,再搜尋自己第二個子視圖直到找到為止。找不到就返回nil

 

當然,最穩妥的方法還是確保tag值的唯一

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.