Подтвердить что ты не робот

Раскадровка iPhone: сцена для портретной и пейзажной сцены

Если вы немного прокрутите страницу Страница разработчика Apple, вы найдете раздел "Создание альтернативного ландшафтного интерфейса". Основной подход, описанный здесь, заключается в том, чтобы представить другой файл NIB в качестве модального представления при изменении ориентации. Я использую функцию раскадровки, поэтому у меня нет NIB. Как загрузить в этом случае другую "сцену"?

Кроме того, я использую контроллер панели вкладок, я не хочу показывать модальное представление. Я просто хочу заменить текущий портретный вид ландшафтным видом, созданным с помощью построителя интерфейсов, и сохранить панель вкладок. Каким будет способ раскадровки для решения задачи "Создание альтернативного ландшафтного интерфейса"? Спасибо.

4b9b3361

Ответ 1

Когда вы добавляете контроллер просмотра в раскадровку, он имеет вид. Вызовите это представление контейнера. Добавьте в представление контейнера два вида: портретный и ландшафтный. Установите размер портретного вида и пейзажного вида соответствующим образом с помощью инспектора размера. Добавьте кнопки, больше видов, ярлыков или что-либо другое в портретные и пейзажные виды, необходимые для вашего приложения. Затем, когда изменения ориентации скрывают один вид и показывают другое.

Ответ 2

Вы можете настроить навигационный контроллер и один основной вид. Затем вы можете использовать представление шаблона для портретных и ландшафтных макетов (2 дополнительных вида).

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

Для этого вы используете гибридный подход в отношении написания некоторого кода пользовательского интерфейса и использования Interface Builder. После установки двух шаблонов создайте уникальный идентификатор для каждого из них. Вам нужно будет написать некоторую логику для обработки представления и его подзонов. Рекурсивный метод для возврата их коллекции на основе выбранного вами шаблона.

Основная логика в реализации контроллера корневого представления должна будет проверить isPortrait, и на основании этого вы захотите загрузить правильный вид на основе идентификатора.

Поэкспериментируйте с этой концепцией и посмотрите, работает ли она для вас. Основные преимущества не использования двух отдельных представлений с уникальными элементами управления (а не общим подходом с одинаковыми тегами) заключается в том, что вы сохраняете доступ к своим исходным представлениям. Любые переменные экземпляра, которые вы определяете в контроллере представления, который указывает на текст, отмеченный, ярлык и т.д., Продолжают делать это независимо от того, какой шаблон используется. Это поддерживает подход модели, представления, управления, поскольку структура данных остается неизменной.

Используя этот подход, вы все равно можете максимизировать использование конструктора интерфейсов и компоновку шаблонов для каждого представления, сохраняя при этом гибкость при написании пользовательского пользовательского кода, если хотите. Использование только компоновщика интерфейсов может быть немного ограничено время от времени, и написание пользовательского кода на основе ориентации блокирует вас в немного утомительной работы.

Надеюсь, это поможет некоторым.

Ответ 3

Вы можете сделать xib файл, содержащий 2 uiviews, один портрет и один для пейзажа. Назначьте в качестве владельца файла xib, тот же viewcontroller вида, который у вас есть в раскадровке. В viewDidLoad загрузите файл xib и добавьте подходящий вид для портретной или альбомной ориентации.

Итак, если у вас есть раскадровка с множеством контроллеров view, вы можете установить две возможности (портретный или альбомный вид) только в просмотренных контроллерах, которые вас интересуют, чтобы изменить ориентацию.

Я использовал это решение и работал очень хорошо!