在某些實作上我們需要取得畫面上所有元件的 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 來做輔助。
沒有留言:
張貼留言