Некоторые детали: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
?
Примечание стороны: Я также попытался не делая InitialController
UINavigationController
и иерархия вид становится:
<InitialController 0x7fcddac9da30>, state: disappeared, view: <UIView 0x7fcddb35e500> not in the window
+ <LoginController 0x7fcddaf02eb0>, state: appeared, view: <UIView 0x7fcddb3635a0>, presented with: <_UIFullscreenPresentationController 0x7fcddb103700>
, который снова не позволяет мне совать в InitialController
либо?
yep получается, что UINavigationController не может быть собственным автономным корнем. Не знал, что спасибо – gadu