2012-02-17 25 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