2012-05-24 55 views
1

在我的UIViewController後代中,我有一組四個「塊」。每個「塊」是一個UIView四個孩子:兩個UILabel's,一個UIImageView和一個UIView。所有這些都是在界面構建器中創建的,並使用IBOutlet的類連接到類。參考UIView的變量名稱

在我的課,我有相應的成員:

IBOutlet UIView  *block1; 
IBOutlet UILabel  *title1; 
IBOutlet UILabel  *text1; 
IBOutlet UIImageView *image1; 
IBOutlet UIView  *separator1; 

IBOutlet UIView  *block2; 
IBOutlet UILabel  *title2; 
IBOutlet UILabel  *text2; 
IBOutlet UIImageView *image2; 
IBOutlet UIView  *separator2; 

IBOutlet UIView  *block3; 
IBOutlet UILabel  *title3; 
IBOutlet UILabel  *text3; 
IBOutlet UIImageView *image3; 
IBOutlet UIView  *separator3; 

IBOutlet UIView  *block4; 
IBOutlet UILabel  *title4; 
IBOutlet UILabel  *text4; 
IBOutlet UIImageView *image4; 
IBOutlet UIView  *separator4; 

我得到的數據進行動態設置到這些UIViews - 它總是在一組四個人,因此每個塊的初始化是一樣。理想情況下,我想這樣做:

Block *block; 
UIImage *img; 

for(int i=1; i<=4; i++) 
{ 
    block = [response blockNumbered:i]; 

    [<"title"+i> setText:[block getTitle]]; 
    [<"text"+i> setText:[block getText]]; 
    img = [block getImage]; 
    if(img) 
    { 
     [<"image"+i> setImage:img]; 
    } 

    [<"separator"+i> setHidden:![block needSeparator]]; 
} 

(請注意,這是簡化代碼,在現實生活中,還有很多事情需要這個初始化,對於四個塊的接近200行代碼 - 但是完全一樣的邏輯)現在,如果我只能以某種方式引用具有字符串變量名稱的視圖!

有沒有什麼辦法可以實現這一點?

P.S.我知道我可以在代碼中創建所有這些視圖作爲相應視圖的數組,但是我必須在代碼中進行佈局 - 我寧願在IB中執行此操作。或者是否有任何方法可以將UIViews的數組聲明爲IBOutlet並將數組中的每個元素連接到IB?

回答

2

您可以使用valueForKey:

[[self valueForKey:[NSString stringWithFormat:@"title%d", i]] setText:[block getTitle]]; 
+0

A-HA!看起來正是我所追求的。讓我試試看,回到你身邊。 –

0

你應該考慮修改你的邏輯並使其依賴於標記。您可以稍後標記所有子視圖,例如subview1.tag = 1001;subview2.tag = 1002;,您可以迭代標記值的所有子視圖。

+0

好吧,這肯定是一個選擇 - 隨着'[父viewWithTag:(INT)]' –