Правильный способ сделать это - заставить контроллер, обрабатывающий UISegmentedControl
, добавить представления контроллеров в качестве подпредставлений.
[self.view addSubview:controller.view];
Вы несете ответственность за отправку viewWillAppear:
и т. Д.
РЕДАКТИРОВАТЬ: Смещение, о котором вы говорите, может быть скорректировано с помощью:
controller.view.frame = CGRectMake(x, y, width, height);
РЕДАКТИРОВАТЬ 2: В ответ на tc.'sкомментарий:
Из документации UISplitViewController
:
Переадресация сообщений на дочерние контроллеры представления
Контроллер с разделенным просмотром помещает себя между окном приложения и егодочерние контроллеры представления.В результате все сообщения для видимых контроллеров представления должны проходить через контроллер разделения представления.Обычно это работает так, как вы могли ожидать, и поток сообщений должен быть относительно интуитивно понятным.Например, сообщения о появлении и исчезновении вида отправляются только тогда, когда соответствующий дочерний контроллер вида фактически появляется на экране.Таким образом, когда контроллер разделенного представления сначала отображается в портретной ориентации, он вызывает viewWillAppear: и viewDidAppear: методы только контроллера представления, который показан изначально.Контроллер представления, представленный с использованием всплывающего окна, не получает эти сообщения до тех пор, пока не отобразится всплывающее окно или пока контроллер разделенного представления не повернется в альбомную ориентацию.
Это не волшебно, и нет причин, почемуВы не сможете написать подобный контроллер самостоятельно.На самом деле я сделал это, и это сработало просто отлично.