Добавление IBOutlet UIView в массив во время инициализации - PullRequest
1 голос
/ 17 февраля 2012

В последнее время я немного запутался с 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];

Это вызывается в функции init моего класса UIViewController.Я связал все IBOutlets с соответствующими представлениями в файле xib / interface, но они не инициализируются.При дальнейшей отладке похоже, что представления не инициализируются до тех пор, пока не будет вызвана функция init?

Так, как я могу создать массив этих объектов?Мне нужно будет выбрать соответствующий вид перед тем, как будет показан сам вид, поэтому viewDidLoad не является опцией.

Я знаю, что вы можете захватывать теги вещей и неявно устанавливать их, используя:

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

Но можно ли это использовать для поиска представлений, так как он будет обязательно искать теги в первоначально инициализированном представлении (view1)?

Спасибо за любую помощь в продвинутых, Kind Regards, Elliott

1 Ответ

1 голос
/ 17 февраля 2012

Вы можете инициализировать 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;
}
...