Переключение между UIViewControllers с помощью UISegmentedControl - PullRequest
1 голос
/ 05 апреля 2011

У меня есть панель вкладок -> структура навигационного контроллера.На одной из этих вкладок я хочу переключаться между двумя UIViewController (точнее, KalViewController и UITableViewController), используя UISegmentedControl, расположенный на панели навигации.

В настоящее время у меня есть третий UIViewController, который выскакивает и выдвигает соответствующие ViewController при изменении значения сегмента.Я не думаю, что это правильный способ сделать это, и это также разрушает стек навигации (когда я нажимаю на элемент панели, контроллер навигации переходит в корневой контроллер, который не будет работать).И есть еще одна ошибка, связанная с компонентом Kal.

Итак, как же это сделать правильный ?

1 Ответ

3 голосов
/ 05 апреля 2011

Правильный способ сделать это - заставить контроллер, обрабатывающий UISegmentedControl, добавить представления контроллеров в качестве подпредставлений.

[self.view addSubview:controller.view];

Вы несете ответственность за отправку viewWillAppear: и т. Д.

РЕДАКТИРОВАТЬ: Смещение, о котором вы говорите, может быть скорректировано с помощью:

controller.view.frame = CGRectMake(x, y, width, height);

РЕДАКТИРОВАТЬ 2: В ответ на tc.'sкомментарий:

Из документации UISplitViewController:

Переадресация сообщений на дочерние контроллеры представления

Контроллер с разделенным просмотром помещает себя между окном приложения и егодочерние контроллеры представления.В результате все сообщения для видимых контроллеров представления должны проходить через контроллер разделения представления.Обычно это работает так, как вы могли ожидать, и поток сообщений должен быть относительно интуитивно понятным.Например, сообщения о появлении и исчезновении вида отправляются только тогда, когда соответствующий дочерний контроллер вида фактически появляется на экране.Таким образом, когда контроллер разделенного представления сначала отображается в портретной ориентации, он вызывает viewWillAppear: и viewDidAppear: методы только контроллера представления, который показан изначально.Контроллер представления, представленный с использованием всплывающего окна, не получает эти сообщения до тех пор, пока не отобразится всплывающее окно или пока контроллер разделенного представления не повернется в альбомную ориентацию.

Это не волшебно, и нет причин, почемуВы не сможете написать подобный контроллер самостоятельно.На самом деле я сделал это, и это сработало просто отлично.

...