2012-02-17 27 views
1

最近我對UIViews有些困惑,我一直在使用它們,直到這一點,他們只是拒絕遵守!在初始化期間將IBOutlet UIView添加到數組中

我有一個UIViewController,它包含5個不同的視圖。我創建IBOutlets對於這些意見,我想在運行時交換它們:

IBOutlet UIView *view1; 
IBOutlet UIView *view2; 
IBOutlet UIView *view3; 
IBOutlet UIView *view4; 
IBOutlet UIView *view5; 

爲了使它們更容易維護,我決定讓他們所有的數組,稱爲viewArray內。現在我試圖將視圖添加到數組中,如下所示:

viewArray = [NSArray arrayWithObjects:view1, view2, view3, view4, nil]; 

這是在我的UIViewController類的init函數中調用的。我已將所有IBOutlet鏈接到它們在xib/interface文件中的相關視圖,但它們似乎未被初始化。在進一步調試之後,它看起來像視圖在初始化函數被調用之後才被初始化?

那麼我該如何創建這些對象的數組?在顯示視圖之前,我需要選擇相關視圖,因此viewDidLoad不是一個選項。

我知道,你可以抓住事物的標籤和隱式使用它們設置:

imageExample = (UIImageView *)[self.view viewWithTag:100]; 

但僅憑這些就能用來尋找的看法,它肯定會被搜索的最初初始化視圖中的標籤(廠景)?

感謝先進的任何幫助, 親切的問候, 埃利奧特

+0

哪裏了'viewArray = [NSArray的arrayWithObjects ...'語句出現在你的代碼中?它是你的'init'方法嗎? – dasblinkenlight 2012-02-17 15:45:51

+0

是的,它在init中。 – 2012-02-17 15:49:03

+0

我假設在你第一次訪問它們時,'IBOutlet'變量的值被設置爲非零,對吧? – dasblinkenlight 2012-02-17 15:57:19

回答

1

您可以懶洋洋地初始化viewArray,對於具有使用self.viewArray代替不合格viewArray的價格。

這裏是你如何能做到這:

在.h文件:

NSArray* _viewArray; 

@property (nonatomic, readonly) NSArray *viewArray; 

在.m文件:

-(NSArray*) viewArray { 
    if (!_viewArray) { 
     _viewArray = [NSArray arrayWithObjects:view1, view2, view3, view4, nil]; 
    } 
    return _viewArray; 
} 
+0

self.viewArray和viewArray有什麼區別?這段代碼如何工作,如果你不介意解釋它,我將不勝感激:) – 2012-02-17 16:09:16

+0

@ ElliottD'Alvarez'self.viewArray'是使用屬性語法表達的方法調用; 'viewArray'將是一個實例變量的引用。每當你引用'self.viewArray'時,例如在像'[self.viewArray objectAtIndex:i]'這樣的方法調用中''viewArray'方法被調用。它檢查被分配的變量_viewArray。第一次將它設置爲'nil',所以'if'語句體將被執行,'_viewArray'實例變量將被設置。在隨後的調用中,_viewArray不會是'nil',並且會返回給調用者。 – dasblinkenlight 2012-02-17 16:14:23

+0

完美的解釋,感謝所有的幫助:) – 2012-02-17 16:17:57