Контроллер разделенного экрана для iPhone 6 Plus

Я хочу адаптировать свое приложение к iPhone 6+ с помощью контроллера Split View. В настоящее время мое приложение представляет собой простое табличное представление, в котором перечислены мои статьи и подробное представление.

Я хочу, чтобы мое приложение переключалось на разделенный вид в ландшафтном режиме на iPhone 6 Plus, но я не знаю, как это сделать правильно.

Я создал новую раскадровку и интегрировал контроллер Split View, и после этого я застрял. Я не знаю, как передать мои новости в контроллер подробного представления, когда я нажимаю ячейку в основном представлении (которое является табличным представлением). Я попытался добавить это в метод didSelectRowAtIndexPath:

[self.navigationController pushViewController:viewController animated:YES];

но когда я это делаю, подробное представление помещается внутрь левой части разделенного представления (основного представления).

Я также попытался добавить переход «показать подробности» между ячейкой контроллера табличного представления и контроллером подробного представления и добавить метод didSelectRowAtIndexPath:

[self performSegueWithIdentifier:@"showDetails" sender:self];

но та же проблема, представление помещается внутрь главного представления.

Другая проблема: в портретном режиме по умолчанию используется подробный вид. Как я могу показать основной вид?

Заранее спасибо за помощь !


person ThibaultV    schedule 04.10.2014    source источник
comment
Поведение контроллера представления Master-Detail по умолчанию — это push при переходе от Master к Detail. Вы можете изменить его на «Показать детали» или «Представить модально».   -  person gabbler    schedule 04.10.2014


Ответы (2)


Из вашего основного контроллера представления вы должны иметь доступ к самому SplitViewController, используя self.splitViewController. У SplitViewController есть свойство viewControlers, представляющее собой массив из двух элементов: первый — контроллер представления для мастера, второй — контроллер представления для детализированной стороны. В каждом случае верхний контроллер в иерархии обычно является контроллером навигации. Итак, из кода вашего главного контроллера (tableView) вы можете получить доступ к detailController с помощью чего-то вроде:

UINavigationController *detailNav = self.splitViewController.viewController[1];
[detailNav pushViewController:viewController animated:YES];

На практике вам, вероятно, следует использовать что-то более сложное, чем push, чтобы избежать ужасного накопления стека, когда вы нажимаете на разные ячейки в главном представлении. Но это должно вас завести. Кроме того, создайте тестовое приложение master/detail, используя шаблоны Apple, и проанализируйте, как они работают. В нем есть некоторый код для отображения основного контроллера представления во всплывающем контроллере, как он представлен в портретном режиме.

person pbasdf    schedule 04.10.2014

Есть несколько блогов, рассказывающих о поведении разделенного экрана на iOS 8 с примерами кода:

Цель C

Swift

Очень понятно и полезно :)

person thanhbinh84    schedule 07.05.2015