在init期间将IBOutlet UIView添加到数组

时间:2012-02-17 15:42:27

标签: uiview uiviewcontroller initialization nsarray iboutlet

我最近对UIViews感到有些困惑,我一直在使用它们直到这一点,他们只是拒绝遵守!

我有一个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文件中的相关视图,但它们似乎未初始化。进一步调试后,看起来直到调用init函数后才初始化视图?

那么如何创建这些对象的数组呢?我需要在显示视图本身之前选择相关视图,因此viewDidLoad不是一个选项。

我知道您可以抓取事物的标记并使用以下方式隐式设置它们:

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

但这可以用来查找视图,因为它肯定会在最初初始化的视图(view1)中搜索标签吗?

感谢先进的任何帮助, 亲切的问候, 埃利奥特

1 个答案:

答案 0 :(得分: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;
}