iOS как отобразить новый UIView?

Новое в iOS dev. Пожалуйста, поправьте меня, если я ошибаюсь?

У меня есть UIWindow, а rootviewcontroller:

@interface ViewController : UIViewController
{
IBOutlet UIButton *but;
}

@property (nonatomic, strong) UIButton  *but;
-(IBAction) butButtonPressed;

@end

то есть: если я сделаю этот Viewcontroller корневым контроллером представления, отобразится UIView, доступный в ViewController. Понял.

Я создал новый класс, унаследованный от UIViewController, вместе с его файлом .xib.

Итак, имя файла xib: view1.xib,

Моя цель - отображать это представление при нажатии кнопки.

Теперь я создал кнопку, и нажатие кнопки вызывает butButtonPressed. Внутри butButtonPressed я сделал следующее.

  myViewController *vcontroler = [[ViewController alloc] initWithNibName:@"view1" bundle:nil];
    [self.view.window addSubview:vcontroler.view];

Приложение вылетает. Что я делаю неправильно ? Пожалуйста, укажите.


person Whoami    schedule 06.08.2012    source источник


Ответы (1)


Этот...

[self.view.window addSubview:vcontroler.view];

... это действительно плохая стратегия (и я серьезно хотел бы знать, где люди находят ее, чтобы показать взгляды). Если вы создаете контроллер представления, вы должны использовать его, а не просто рассматривать его как временный контейнер, из которого вы можете извлекать представления.

Если вы хотите, чтобы vcontroler выглядел как дочерний элемент вашего первого контроллера (а у вас есть UINavigationController), используйте pushViewController:animated:. В противном случае вы можете показать его как модальное с помощью presentModalViewController:animated:.

Если вы хотите только добавить представление к существующему отображению, поместите представление в иерархию ViewController и покажите / скройте его.

Если вам абсолютно необходимо иметь его в качестве субконтроллера ViewController, вам необходимо сохранить ссылку на него и управлять его жизненным циклом внутри контроллера-владельца.

person Phillip Mills    schedule 06.08.2012
comment
Филипп, спасибо за ответ. Показываете ли вы, как этого добиться: если вы хотите добавить представление только к существующему дисплею, поместите представление в иерархию ViewController и покажите / скройте его. - person Whoami; 06.08.2012
comment
Под этим я подразумеваю добавить представление в виде подпредставления внутри файла .xib ViewController и пометить его как скрытое. При нажатии кнопки для свойства hidden представления устанавливается значение NO. - person Phillip Mills; 06.08.2012