3

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

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

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

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

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

спасибо!

ответ

2

Возможно, вы захотите посмотреть 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 изменения.

+0

Спасибо за ваш ответ. Наверное, я не очень хорошо объяснил свой вопрос. У меня есть четкая идея с графической точки зрения, но моя проблема техническая. Проблема в том, что у меня есть 2 контроллера вида, AViewController и BViewController, и я хочу переключаться между ними, когда пользователь нажимает на соответствующий сегмент. Как в приложении «Календарь», где использование может использовать «список», «день» и «месяц». Без использования контроллера панели вкладок и без использования модального контроллера. Еще раз спасибо. – Larry

+0

Я обновил его с более подробной информацией. –

+0

Спасибо, Бен! Действительно полезно. Знаете ли вы, будут ли выполняться такие методы просмотра {Will, Did} Appear: из AViewController и BViewController? Это важно для меня. Мне нужно что-то, что делает все автоматически, точно так же, как контроллер панели вкладок ... – Larry

2

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

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

// display view B 
[rootView bringSubviewToFront:BViewController.view]; 
+0

Спасибо, но это так, viewWillAppear :, viewDidAppear :, viewWillDisappear: и viewDidDisappear: вызывается методы AViewController и BViewController? Если да, это то, что я ПЕД. Спасибо. – Larry

+0

Я бы так и ожидал. Но если нет, вы всегда можете называть их вручную. – pheelicks

+0

Я не хочу называть их вручную. Мне нужно что-то, что делает все автоматически, точно так же, как контроллер панели вкладок ... Во всяком случае, теперь я стараюсь. Спасибо. – Larry

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