在初始化期间将IBOutlet UIView添加到数组中
最近我对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];
但仅凭这些就能用来寻找的看法,它肯定会被搜索的最初初始化视图中的标签(厂景)?
感谢先进的任何帮助, 亲切的问候, 埃利奥特
您可以懒洋洋地初始化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;
}
self.viewArray和viewArray有什么区别?这段代码如何工作,如果你不介意解释它,我将不胜感激:) – 2012-02-17 16:09:16
@ 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
完美的解释,感谢所有的帮助:) – 2012-02-17 16:17:57
哪里了'viewArray = [NSArray的arrayWithObjects ...'语句出现在你的代码中?它是你的'init'方法吗? – dasblinkenlight 2012-02-17 15:45:51
是的,它在init中。 – 2012-02-17 15:49:03
我假设在你第一次访问它们时,'IBOutlet'变量的值被设置为非零,对吧? – dasblinkenlight 2012-02-17 15:57:19