2015-11-24 3 views
2

Я боролся с этой проблемой в течение нескольких дней и не могу заставить ее работать. Прочитать несколько должностей СО (this, this, this, this, this и this). Спросил моего друга Google, помог понять проблему, но не решить ее.Swift UISplitViewController с несколькими раскадными версиями для подробного просмотра

В первой версии моего приложения iOS (Swift2 и XCode7) я использую UITableViewController и UINavigationViewController для загрузки нового контента из другой UIStoryboard. Все это прекрасно работает. Для второй версии этого приложения я хочу реализовать UISplitViewController и теперь я получаю ошибку:

*** Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason: 'adding a root view controller as a child of view controller:

Я понимаю намек, но не могу решить таким образом, что работает как в портретном и ландшафтном режиме. Более того, такое решение, которое я использовал, не использовало UINavigationController в ландшафтной ориентации.

Я создал тестовый проект, чтобы отследить эту ошибку, надеясь ее решить.

Это код, который генерирует ошибку:

let storyboard = UIStoryboard(name: "ThirdScreen", bundle: nil) 
    let controller = storyboard.instantiateInitialViewController() as! ThirdDetailViewController 
    controller.title = "Miracle!" 
    splitViewController?.showDetailViewController(controller, sender: nil) 

Полный код этого тестового проекта available from GitHub.

Как это сделать?

Большое спасибо!

ответ

4

Я нашел решение, хитрость заключается в том, чтобы удалить SEGUE и использовать раскадровки ссылку, как это:

storyboard reference

Для тестирования и учебных целях, я создал полный тестовый проект, который available from GitHub. Это демонстрирует использование нескольких раскадровки для детального просмотра.

Обновление 28 ноября: это решение работает, но требует iOS 9. Вполне возможно использовать другой UIViewController в качестве элемента DetailViewController (что означает, что шаблон можно использовать), пока вы удаляете segue, реализуете tableView: didSelectRowAtIndexPath и используете код из пример. В последнем случае он также работает на iOS 8.

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