在我们的故事板中,我们有多个UINavigationController
堆栈。例如,LoginViewController
堆栈完全独立于SWRevealViewController
stack.
在它们之间切换的最佳实践是什么?当我按下注销按钮时(注销按钮位于SWRevealController
stack),然后尝试呈现 LoginViewController 堆栈,我收到如下错误:
Warning: Attempt to present LoginViewController on SWRevealViewController whose view is not in the window hierarchy!
尽管我特别设置self.window.rootViewController
到登录视图控制器的UINavigationController
在应用程序委托中像这样:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Spitfire" bundle:nil];
UINavigationController *nav = [storyboard instantiateViewControllerWithIdentifier:@"LoginNavigationController"];
LoginViewController *loginVC = [storyboard instantiateViewControllerWithIdentifier:@"LoginViewController"];
self.window.rootViewController = nav;
[nav presentViewController:loginVC animated:NO completion:nil];
有什么办法可以“解除”当前的UINavigationController
堆叠并使用新的?或者也许我不应该在我的应用程序委托中调用此代码?
我没玩过SWRevealViewController
在你提出问题之前,所以我之前的回答比较笼统。我创建了一个示例应用程序here https://github.com/evandelaney/StackOverflow-19852616它会尽力丢弃尽可能多的导航堆栈;我确信我已经涵盖了您的用例。
我会提请您注意以下几点:
我之前的回答中的“主要流程”正好位于故事板的中间;这应该可以帮助你确定方向。
SWRevealViewController.m
可以与故事板结合使用,并且有一个非常聪明的技巧来做到这一点,但它的文档是埋藏在实施中 https://github.com/John-Lluch/SWRevealViewController/blob/master/SWRevealViewController/SWRevealViewController.m#L440。我花了一段时间才弄清楚到底发生了什么,但我的示例应用程序说明了用法(两个转场,一个用于“前”,另一个用于“后”,可以有第三个用于“右”)。
应用程序的主流程完全替换为备用流程。这是设计的SWRevealViewController
。你本质上是交换到一个全新的应用程序。
所有以模态方式呈现的子流程disrupt流量。
作者是SWRevealViewController
尚未提供UIStoryboardSegue
用于替换前视图、后视图和右视图控制器的子类。这实现起来很简单,但我选择手动进行交换FHKSettingsViewController
的实施。
我重复了代码并创建了一些很小的类,以确保我所做的事情是显而易见的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)