Раскадровка, UIViewController и UISplitViewController
Попытка сделать приложение на основе раскадровки для iPad. В нем мне нужно перейти с экрана запуска (UIViewController) на главный экран (UISplitViewController), а затем в полноэкранный режим (снова UIViewController).
Я видел несколько обсуждений в Интернете (по крайней мере несколько - в stackoverflow), заявляя, что UISplitViewController не может использоваться в приложении на основе раскадровки любым другим способом, чем RootViewController. Некоторые потоки содержат обходные пути, а также альтернативный splitview (https://github.com/mattgemmell/MGSplitViewController), чтобы справиться с этим.
Но я не могу понять, почему Apple документация говорит об обратном. Вот ссылка в раздел из библиотеки Apple iOS 5.0. В нем указано:
Создание контроллера Split View с помощью раскадровки
Чтобы добавить контроллер разделенного представления в раскладку приложений:
- Откройте основную раскладку приложений.
- Перетащите контроллер разделенного представления из библиотеки. Это также создает контроллеры представлений
для двух панелей контроллера разделенного вида.
- Для каждого из контроллеров разделенных представлений, содержащих контроллеры представлений, используйте инспектор удостоверений для установки имени класса контроллера представления.
Чтобы представить интерфейс разделенного вида, выполните одно из следующих действий:
- Покажите это как первую сцену, выбрав сцену и проверив
поле "Исходный контроллер просмотра" под инспектором атрибутов.
- Отобразить его с другой сцены, добавив к нему модальный переход.
- Отобразить его программно, вызывая метод executeSegueWithIdentifier: sender: метод для начала модального сегмента.
Я пробовал это разными способами, но подходы, описанные в последних двух утверждениях, никогда не работали.
Как модальный сегмент, так и performSegue... сбой с известной ошибкой:
"*** Завершение приложения из-за неперехваченного исключения" NSInvalidArgumentException ", причина:" Приложение попыталось представить контроллеры с разделенным представлением по модулю... "
Кто-нибудь может это объяснить? Это ошибка в XCODE/iOS 5.0 или ошибка в документации?
С уважением,
Petr
Ответы
Ответ 1
В соответствии с этой статьей Apple контроллер разделенного представления должен быть корневым. Вот фрагмент:
Контроллер разделенного представления всегда должен быть корнем любого создаваемого вами интерфейса. Другими словами, вы всегда должны устанавливать представление из объекта UISplitViewController в виде корневого представления вашего окна приложений. На панели вашего интерфейса с разделенным изображением могут быть включены контроллеры навигации, контроллеры панели вкладок или любой другой контроллер вида, который вам нужен для реализации вашего интерфейса. Сплит-контроллеры не могут быть представлены модально.
Ответ 2
Кажется, что documentation был обновлен вскоре после публикации этого вопроса. Согласно новой документации, нет возможности переходить к раскадровке. Вот досада!
Ответ 3
Да, возможно переход из UIView в UISplitView.
Вы должны использовать пользовательский сегмент.
Прочитайте эту ссылку (переведите ее с японского)
UIViewController для UISplitViewController
Ответ 4
Что касается меня, я использовал MGSplitViewController для реализации SplitView с модальными или push-сегментами.
Попробуйте, он работает!