0

Некоторые детали:UIViewController не появляется в корне?

InitialController является точкой входа раскадровки. Там я проверяю, что я вошел в систему и выполнил segue на главной странице приложения, или если я не тогда, я выполняю команду для входа в контроллер входа.

I.e. в InitialController (который является UINavigationController) Я

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidLoad]; 
    if ([already logged in]) { 
     [self performSegueWithIdentifier:@"toMain" sender:self]; 
    } else { 
     [self performSegueWithIdentifier:@"toLogin" sender:self]; 
    } 
} 

Если я иду маршрут входа, я получаю до точки, где мой взгляд контроллер выглядит следующим образом (с использованием метода внутреннего _printHierarchy)

<InitialController 0x7fbdfc81c200>, state: appeared, view: <UILayoutContainerView 0x7fbdfa3b8910> 
    | <LoginController 0x7fbdfa01be50>, state: disappeared, view: <UIView 0x7fbdf9631670> not in the window 
    | <AnotherController 0x7fbdfe286e00>, state: appeared, view: <UIView 0x7fbdfe12b680> 

Когда Я заканчиваю действие на AnotherController я называю popToRootViewController ... это досадно берет меня LoginController, но я попытался обойти эту проблему путем добавления этого метода к LoginController

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    if (...) { // is only true when I want it to be true 
     [self.navigationController popToRootViewControllerAnimated:NO]; 
    } 
} 

Я установил контрольную точку, которая печатает иерархию снова, прежде чем я называю этот метод popToRoot ... и я получаю:

<InitialController 0x7fbdfc81c200>, state: appeared, view: <UILayoutContainerView 0x7fbdfa3b8910> 
    | <LoginController 0x7fbdfa01be50>, state: appeared, view: <UIView 0x7fbdf9631670> 

Но он остается на LoginController, несмотря на то, я хочу вернуться к InitialController. Почему это не позволяет мне вернуться к InitialController? Я предполагаю, что это может быть связано с тем, что они оба появились, поэтому, возможно, LoginController как-то рассматривается как корень или что-то связанное с UILayoutContainerView?

Примечание стороны: Я также попытался не делая InitialControllerUINavigationController и иерархия вид становится:

<InitialController 0x7fcddac9da30>, state: disappeared, view: <UIView 0x7fcddb35e500> not in the window 
    + <LoginController 0x7fcddaf02eb0>, state: appeared, view: <UIView 0x7fcddb3635a0>, presented with: <_UIFullscreenPresentationController 0x7fcddb103700> 

, который снова не позволяет мне совать в InitialController либо?

ответ

0

UINavigationController - это контейнер, управляющий стеком viewControllers (который не включает себя). RootViewController из UINavigationController является первым viewController в этом стеке, так что это будет popToRootViewControllerAnimated: направить вас. Вы не должны размещать свой контент непосредственно в UINavigationController.

Моя рекомендация состоит в том, чтобы точка входа в раскадровку была отдельным UINavigationController, который затем содержит InitialController в качестве первого viewController в своем стеке (который должен быть UIViewController, а не UINavigationController). Затем, когда вы вызываете popToRootViewControllerAnimated: в UINavigationController вы попадете в InitialController.

+0

yep получается, что UINavigationController не может быть собственным автономным корнем. Не знал, что спасибо – gadu

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

  • Нет связанных вопросов^_^