Как переключаться между UIViewControllers без использования панели вкладок? - PullRequest
3 голосов
/ 05 марта 2010

У меня есть UINavigationController. На 2-м уровне моей иерархии я хочу показать контроллер представления с панелью инструментов, в которую я вставил сегментированный элемент управления. С его помощью пользователь может выбирать между двумя «представлениями» одной и той же страницы, которую мы можем назвать A и B (как в приложении «Календарь»).

Когда пользователь нажимает сегмент A, должен отображаться вид A. Когда пользователь нажимает сегмент B, должен отображаться вид B.

A и B - сложные представления, поэтому я предпочитаю управлять ими в двух отдельных контроллерах представления, называемых AViewController и BViewController.

Первоначально я думал вставить AViewController и BViewController в UITabBarViewController, но в pushViewController: animated: официальная документация Я прочитал, что контроллер push-представления «не может быть экземпляром контроллера панели вкладок».

Знаете ли вы, как я могу переключаться между AViewController и BViewController без использования UITabBarViewController?

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

Ответы [ 2 ]

2 голосов
/ 05 марта 2010

Я бы добавил оба ваших представления в качестве подпредставлений представления (назовите его rootView) и использовал бы их, чтобы их отобразить:

// display view A
[rootView bringSubviewToFront:AViewController.view];

// display view B
[rootView bringSubviewToFront:BViewController.view];
2 голосов
/ 05 марта 2010

Возможно, вы захотите взглянуть на UISegmentView, который даст вам несколько кнопок, которые вы можете использовать для изменения содержимого представления.

Другим вариантом будет использование кнопки «Информация» с приятным переворотом между представлениями.

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

Технический ответ

Создайте контроллер представления контейнера, который содержит представление UISegment и 2 переменных экземпляра контроллера представления, AViewController и BViewController. Также в вашем главном контроллере представления есть контейнерное представление, которое устанавливает соответствующий кадр для дочерних представлений. Создайте оба экземпляра в viewDidLoad, но покажите только тот, который выбран в данный момент ...

-(void)showAppropriateView {

     if([segment selectedIndex] == A_VIEW_SEGMENT) {
         [self.containerView addSubView:aViewController.view];
         [bViewController.view removeFromSuperView];
     } else {
         [self.containerView addSubView:bViewController.view];
         [aViewController.view removeFromSuperView];
     }
}

Вызовите этот метод при изменении UISegmentView.

...