Главное представление не отображается, когда я добавляю Split View Controller к раскадровке
Я очень новичок в раскадровке (также довольно новичок в программировании на iOS в целом). Я пытаюсь добавить представление Master/Detail в свою раскадровку для приложения только для iPad. Вот что у меня так далеко:
- Основной контроллер панели вкладок, который управляет навигацией для моего приложения. Это работает.
- Я добавил объект Split View Controller в MainStoryBoard из библиотек.
- Ctrl + перетаскивание из моего контроллера панели вкладок в Split View Controller, выберите Relationship Seque->view controller. Это успешно добавляет Split View Controller в качестве нового элемента вкладки (что я и хочу).
Но теперь, когда я запускаю свое приложение и щелкаю по новому элементу вкладки, просто открывается детальный вид, при этом основной вид нигде не отображается. Я, очевидно, еще не добавил никаких данных, я просто хочу убедиться, что все работает в первую очередь. Мастер не покажет, если это emtpy? Это не то, как другие контроллеры таблиц работали для меня; они все показали пустые таблицы. Это то, что я ищу здесь, чтобы я мог продолжить разводку деталей слева.
Контроллер с разделенным видом выглядит для меня немного чуждо, так как первый контроллер говорит "Контроллер подробного представления" с переходами к контроллеру навигации, затем Контроллер табличного представления для мастера, а затем простой Контроллер представления для детали. Все, что имеет для меня смысл, кроме той точки входа, которая называет себя контроллером подробного представления. Что показывает, когда я запускаю его без основной таблицы всплывающих окон / левой панели.
Обновление: когда я начинаю с шаблона приложения Master-Detail, у объекта Split View Controller на главном экране отображаются как Master View Controller, так и контроллер Detail View. Так что что-то другое, когда я просто перетащил это из библиотеки. Как сделать то же самое в существующей раскадровке без использования шаблона? Я подключил довольно много остальной части навигации к контроллеру вкладок, которую я предпочел бы не повторять.
Благодарю.
3 ответа
Вы не можете использовать Split View Controller как один элемент контроллера панели вкладок.
См., Например, http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/SplitViewControllers.html
Контроллер разделенного представления всегда должен быть корнем любого интерфейса, который вы создаете. Другими словами, вы всегда должны устанавливать представление из объекта UISplitViewController в качестве корневого представления окна вашего приложения. Панели интерфейса разделенного представления могут содержать контроллеры навигации, контроллеры панели вкладок или любой другой тип контроллера представления, необходимый для реализации вашего интерфейса. Контроллеры с разделенным видом не могут быть представлены модально.
Обновление: это, кажется, неправильно с Xcode 6.1 и iOS 7/8. Смотрите ответ @ головной боли.
Похоже, что UISplitViewController был обновлен в iOS8.1, чтобы разрешить использование за пределами корневого представления приложения. Я успешно реализовал элемент панели вкладок, который переходит к UISplitViewController. Собственная документация Apple вроде как подтверждает это одним словом: обычно. Найдено в документации класса для UISplitViewController:
При создании пользовательского интерфейса вашего приложения контроллер разделенного представления обычно является корневым контроллером представления окна вашего приложения.
Так что Apple расплывчата, но я бы взял это, так как это нормально. И я могу подтвердить, что это работает.
Теперь нужно еще кое-что сделать, чтобы предотвратить преждевременный переход к подробному виду. Я не собираюсь повторно хэшировать детали, но прочитайте этот пост, затем подкласс UISplitViewController:
- В viewDidLoad: установите делегата SplitViewController на себя
- Добавьте UISplitViewControllerDelegate в список протоколов
- Затем реализуйте splitViewController: collapseSecondaryViewController: onPrimaryViewController и верните YES всему методу или обстоятельствам, перечисленным в посте ниже.
UISplitViewController в портретной ориентации на iPhone показывает детали VC вместо мастера
Попробуйте протестировать без TabBarController. Если ошибка повторится снова, тогда в Xcode в File Inspector для раскадровки (маленький значок файла обычно в правом углу экрана) снимите флажок Использовать классы размера. Где-то на этом сайте я видел похожую ошибку и этот ответ, также у меня была такая же ситуация, но без контроллера панели вкладок.