Если вы хотите, чтобы выбрать вид динамически установить его внутри -[UIViewController loadView]
. Слово предостережения, хотя: вызов -[UIViewController view]
будет вызывать -[UIViewController loadView]
, если вид не был загружен еще, так что если вы сделаете это:
-(void)loadView
{
self.view = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
self.view.backgroundColor = [UIColor redColor];
}
Вторая строка этого метода будет вызывать -loadView
, и вы получите бесконечное рекурсия (что приведет к переполнению стека и сбою). Вам нужно настроить ваш взгляд, затем установите .view
свойство, когда вы установите его, как это:
-(void)loadView
{
UIView *newView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
newView.backgroundColor = [UIColor redColor];
self.view = newView;
}
Таким образом, вы, вероятно, хотите сделать что-то вроде этого:
-(void)loadView
{
UIView *newView = nil;
if (self.theSkyIsBlue) {
newView = [[[BlueSkyView alloc] initWithFrame:CGRectZero] autorelease];
newView.backgroundColor = [UIColor blueColor];
}
else {
newView = [[[GraySkyView alloc] initWithFrame:CGRectZero] autorelease];
newView.backgroundColor = [UIColor grayColor];
}
self.view = newView;
}
Добавление 1 - обновление, чтобы показать, как использовать представление контейнера для разных представлений, определенных в XIB
Если вы хотите ссылаться на другие материалы в своем XIB, лучше использовать ваш .view как «вид контейнера», для ваших других взглядов. Установите его в -viewDidLoad
, как это:
- (void)viewDidLoad
{
UIView *childView = nil;
if (someCondition) {
childView = self.blueView;
}
else {
childView = self.grayView;
}
[self.view addSubview:childView];
childView.frame = self.view.bounds;
}
Обратите внимание, что если вы хотите поменять свою точку зрения позже, вы должны сделать childView
недвижимость, а не локальным переменным, так что вы можете удалить старую childView
при вставке новенький.
Я должен был упомянуть, оба представления являются частью xib-файла контроллера вида как IBOutlets. Разве это не нормально? иначе я сделал точно так же, как и у вас. – Marty
Я обновил ответ, чтобы показать лучший подход, если вы хотите выбрать один из нескольких видов из XIB-файла View Controller. –
+1 для добавления – Anurag