2012-02-17 2 views
1

В последнее время я немного запутался с UIViews, я использую их до конца, и они просто отказываются быть совместимыми!Добавление IBOutlet UIView к массиву во время init

У меня есть 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. Я связал все IBOutlets с их соответствующими представлениями в файле xib/interface, но они, похоже, не инициализированы. При дальнейшей отладке выглядит, что представления не инициализируются до тех пор, пока не вызывается функция init?

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

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

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

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

Спасибо за любую помощь в передовых, С наилучшими пожеланиями, Elliott

+0

Где в 'viewArray = [NSArray arrayWithObjects ... 'в вашем коде? Это ваш метод 'init'? – dasblinkenlight

+0

Да, это в init. –

+0

Я предполагаю, что значения переменных 'IBOutlet' установлены на не-nil к моменту, когда вам нужно получить к ним доступ в первый раз, правильно? – dasblinkenlight

ответ

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? Как этот код работает точно, если вы не возражаете объяснить это, я был бы благодарен :) –

+0

@ ElliottD'Alvarez 'self.viewArray' - вызов метода, выраженный с использованием синтаксиса свойства; 'viewArray' будет ссылкой на переменную экземпляра. Каждый раз, когда вы ссылаетесь на 'self.viewArray', например, в вызове метода, подобном этому' [self.viewArray objectAtIndex: i], вызывается метод 'viewArray'. Он проверяет переменную _viewArray для назначения. В первый раз вокруг него установлено значение «nil», поэтому тело оператора 'if' будет выполнено, и переменная экземпляра' _viewArray' будет установлена. В последующих вызовах '_viewArray' не будет' nil' и будет возвращен вызывающему. – dasblinkenlight

+0

Отличное объяснение, спасибо за помощь :) –

Смежные вопросы