2010-08-09 5 views
0

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

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

myController.xib
| myController (файла Владелец)
| landscapeView
| - MyWidget
| - ...
| portraitView
| - MyWidget | -. ..

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

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

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

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

ответ

0

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