en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

4.13.2012

取得畫面上所有的元件並判斷它們所屬的類別

在某些實作上我們需要取得畫面上所有元件的 Instance 並且判斷物件所屬的類別在分別給予不同的處理,例如更換畫面的佈景主題,就是一個相當典型的例子,因為不僅要取得畫面中未知數量與元件的 Instance,之後還要判斷該未知元件所屬的類別再分別給予不同的樣式,如果你也有類似的困擾,不妨可以參考以下的做法。

for (id *object in [[self superview] subviews]) {
    if ([id isKindOfClass:[UIImageView class]]) {
        //過濾之後的物件操作
    }
}

上述程式碼中,我們藉由泛用型態 id 來取得畫面中所有物件的 Instance,並且判斷所取得的物件所屬類別是否為 UIImageView 型態。

當然,你也可以修改此方法取得特定 UIView 下的物件,但是必須注意泛用的 id 型態,無法提供原本專屬於該物件的操作方法,例如透過上面的程式碼所取的物件,雖然一定是 UIImageView 的形態,但是它卻無法呼叫 setImage 等方法函式,能夠使用的只有 removeFromSuperview 這類的通用方法函式,除非改用 UIImageView 形態來取得畫面中所有 UIImageView 形態的物件,或是宣告一個對應型態的變數來承接這個 Instance。


ps:在判斷上也可以利用物件的 tag 來幫助判斷,例如,在點擊按鈕之後要尋找畫面上除了自己以外的 UIButton 型態物件,就可以使用 tag 來做輔助。







沒有留言:

張貼留言