Всякий раз, когда я пытаюсь представить UISplitViewController, модально приложение аварийно завершает работу. Таким образом, он всегда должен быть контроллером корневого представления. Может ли кто-нибудь подтвердить это?Контроллер вида Split должен быть контроллером корневого представления
ответ
Из Apple iPad Programming Guide:
Вид Вид контроллера Сплите всегда должен быть установлен как вид вашего окна приложения корневого . Вы никогда не должны представлять разделенный вид внутри навигационной панели или панели вкладок интерфейс.
Так что да, вы не можете представить разделенный вид вне вашего основного окна приложения (который включает в себя модально).
EDIT
Ссылка на документы выше больше не обсуждает эту тему. Соответствующее обсуждение в настоящее время можно найти на сайте компании Apple View Controller Catalog for iOS, в котором говорится следующее:
Раскола-контроллер должен всегда быть корнем любого интерфейса вы создаете. Другими словами, вы всегда должны устанавливать представление из объекта UISplitViewController в качестве корневого представления окна вашего приложения. [...] Сплит-контроллеры не могут быть представлены модально.
вы пробовали? В нем говорится, что «должно» не «должно». И представление режима splitview в полноэкранном режиме - это внутри навигации или интерфейса панели вкладок. Это не означает, что в целом это невозможно. – user309305
Я не пробовал это сам, но учитывая тот факт, что Apple рекомендует не делать этого, и что у вас проблемы с ним, вероятно, было бы лучшей идеей переосмыслить ваш дизайн. Если вы хотите установить тип разделенного вида, было бы просто создать свою собственную настройку «split view» (а не UISplitViewController) в Interface Builder и представить ее в виде модально. – indragie
хорошая идея. благодаря! – user309305
Конечно, вы можете использовать UISplitViewController
, не используя его в качестве контроллера корневого вида. В моем проекте, я использую его так:
- Показать мой собственный ViewController в модальный метод:
[self presentModalViewController:mainViewController animated:YES];
- В mainViewController, у меня есть
UISplitViewController *splitViewController;
и в - (void)viewDidLoad
, установить splitViewController.view
до mainViewController.view
splitViewController.viewControllers = [NSArray arrayWithObjects:masterNavigationController, detailNavigationController, nil];
self.view = splitViewController.view;
Таким образом, вы не получите сообщений от делегата контроллера Split View. – pt2ph8
UISplitController может быть установлен под UITabBarController. Я делаю это. Просто используйте поиск на этом форуме - я нашел хотя бы один хороший образец программного обеспечения.
У меня такая же проблема с той же ошибкой, когда я попытался перейти от обычного контроллера представления контента (т. Е. Без проблем переходить с контроллера табуляции или контроллера навигатора).
К счастью, я нашел способ обойти это, вставив навигационный контроллер между контроллером VC и контроллером разделения. Другими словами, перейдите от VC к контроллеру nav, затем нарисуйте связь отношений между навигационным контроллером и контроллером разделения. Таким образом, создание экземпляра разделенного представления по-прежнему не требует кодирования.
Я обнаружил, что в этом решении - внутри раскадровки - переход от VC к контроллеру nav должен быть Modal segue. – ghr
Да Вам необходимо будет использовать RootViewController, и он должен быть унаследован от UITableViewController.Вы можете взглянуть на это tutorial
Только для справки, я думаю, это путь: см. Похожий вопрос: http://stackoverflow.com/a/19983002/1134595 –