Один контроллер представления, два представления для портрета и пейзажа - PullRequest
0 голосов
/ 10 августа 2010

У меня есть один UIViewController, который управляет портретным представлением и некоторой логикой приложения. Однако мне нужно настроить другой вид для альбомной ориентации. Виджеты между двумя представлениями в основном одинаковы, но их расположение очень отличается.

Моей первой попыткой было использование одного UIViewController и одного связанного XIB. В XIB у меня есть два UIView, LandscapeView для ландшафта и PortraitView для портрета.

myController.xib
| myController (Владелец файла)
| LandscapeView
| - myWidget
| - ...
| PortraitView
| - myWidget | - ...

Затем myController переключается между этими видами в зависимости от ориентации экрана, устанавливая его свойство view.

В моем примере myWidget, по сути, одинаков между двумя представлениями, только изменение их положения. Контроллер имеет IBOutlet для одного из них, и этот IBOutlet изменяется программно, когда происходит изменение ориентации, чтобы указывать на правильный.

Есть ли лучшее решение?

Я проверил пример кода AlternateViews от Apple, но они используют 2 UIViewController для 2 разных представлений. Я хотел бы хранить весь код обработки событий / делегатов только в одном контроллере, а не разбивать его на 2 контроллера.

1 Ответ

0 голосов
/ 10 августа 2010

Скорее всего, у вас есть еще UIView в иерархии, тот, который присваивается свойству view контроллера просмотра при его создании / загрузке, к которому вы добавили landscapeView и portraitView. Если это так, то вы можете добавить myWidget к тому же родительскому представлению, и, пока оно является последним в массиве subviews, оно будет отображаться сверху, когда вы будете отображать / скрывать два других представления. Если у вас еще нет этого родительского представления и вы управляете свойством view вручную, вы можете добавить его в качестве родительского.

...