Раскадровка, 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-сегментами. Попробуйте, он работает!