2010-04-05 5 views
19

Всякий раз, когда я пытаюсь представить UISplitViewController, модально приложение аварийно завершает работу. Таким образом, он всегда должен быть контроллером корневого представления. Может ли кто-нибудь подтвердить это?Контроллер вида Split должен быть контроллером корневого представления

+0

Только для справки, я думаю, это путь: см. Похожий вопрос: http://stackoverflow.com/a/19983002/1134595 –

ответ

20

Из Apple iPad Programming Guide:

Вид Вид контроллера Сплите всегда должен быть установлен как вид вашего окна приложения корневого . Вы никогда не должны представлять разделенный вид внутри навигационной панели или панели вкладок интерфейс.

Так что да, вы не можете представить разделенный вид вне вашего основного окна приложения (который включает в себя модально).

EDIT

Ссылка на документы выше больше не обсуждает эту тему. Соответствующее обсуждение в настоящее время можно найти на сайте компании Apple View Controller Catalog for iOS, в котором говорится следующее:

Раскола-контроллер должен всегда быть корнем любого интерфейса вы создаете. Другими словами, вы всегда должны устанавливать представление из объекта UISplitViewController в качестве корневого представления окна вашего приложения. [...] Сплит-контроллеры не могут быть представлены модально.

+0

вы пробовали? В нем говорится, что «должно» не «должно». И представление режима splitview в полноэкранном режиме - это внутри навигации или интерфейса панели вкладок. Это не означает, что в целом это невозможно. – user309305

+1

Я не пробовал это сам, но учитывая тот факт, что Apple рекомендует не делать этого, и что у вас проблемы с ним, вероятно, было бы лучшей идеей переосмыслить ваш дизайн. Если вы хотите установить тип разделенного вида, было бы просто создать свою собственную настройку «split view» (а не UISplitViewController) в Interface Builder и представить ее в виде модально. – indragie

+0

хорошая идея. благодаря! – user309305

2

Конечно, вы можете использовать UISplitViewController, не используя его в качестве контроллера корневого вида. В моем проекте, я использую его так:

  1. Показать мой собственный ViewController в модальный метод:
 
[self presentModalViewController:mainViewController animated:YES]; 
  1. В mainViewController, у меня есть
 
UISplitViewController *splitViewController; 

и в - (void)viewDidLoad, установить splitViewController.view до mainViewController.view

splitViewController.viewControllers = [NSArray arrayWithObjects:masterNavigationController, detailNavigationController, nil]; 
self.view = splitViewController.view; 
+0

Таким образом, вы не получите сообщений от делегата контроллера Split View. – pt2ph8

1

UISplitController может быть установлен под UITabBarController. Я делаю это. Просто используйте поиск на этом форуме - я нашел хотя бы один хороший образец программного обеспечения.

3

У меня такая же проблема с той же ошибкой, когда я попытался перейти от обычного контроллера представления контента (т. Е. Без проблем переходить с контроллера табуляции или контроллера навигатора).

К счастью, я нашел способ обойти это, вставив навигационный контроллер между контроллером VC и контроллером разделения. Другими словами, перейдите от VC к контроллеру nav, затем нарисуйте связь отношений между навигационным контроллером и контроллером разделения. Таким образом, создание экземпляра разделенного представления по-прежнему не требует кодирования.

+0

Я обнаружил, что в этом решении - внутри раскадровки - переход от VC к контроллеру nav должен быть Modal segue. – ghr

0

Да Вам необходимо будет использовать RootViewController, и он должен быть унаследован от UITableViewController.Вы можете взглянуть на это tutorial

 Смежные вопросы

  • Нет связанных вопросов^_^