iOS 简单视图从导航堆栈错误弹出
Posted
技术标签:
【中文标题】iOS 简单视图从导航堆栈错误弹出【英文标题】:iOS Simple View Pop from Navigation Stack Error 【发布时间】:2014-09-01 23:22:26 【问题描述】:我的故事板如下所示:
我想要实现的是,当在主页上按下“点击我”时,转到“一”,检查这个控制器上的一些逻辑,如果成功,自动转到“二”。
然后,当在“Two”上按下“Back”按钮时,它会将用户带回家,实质上是从堆栈中弹出“One”。
下面是我的“One”控制器的样子:
@implementation OneViewController
- (void)viewDidLoad
[super viewDidLoad];
// example logic, in this case just force them to view two
if(1 == 1)
[self.navigationController popViewControllerAnimated:NO];
TwoViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"two"];
[self.navigationController pushViewController:vc animated:YES];
@end
我遇到了奇怪的行为并收到以下错误:
在意外状态下完成导航转换。 导航栏子视图树可能已损坏。
我似乎无法弄清楚我做错了什么。我已经包含了完整的死简单来源:http://andrewherrick.com/spike/pushpop.zip
编辑:
我尝试将逻辑移至 ViewDidAppear,它只是自动将我踢回“主页”视图,这不是我想要的。
- (void)viewDidLoad
[super viewDidLoad];
-(void)viewDidAppear:(BOOL)animated
// example logic, in this case just force them to view two
if(1 == 1)
[self.navigationController popViewControllerAnimated:NO];
TwoViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"two"];
[self.navigationController pushViewController:vc animated:NO];
【问题讨论】:
嘿,我对 Stroyboard 没有完整的了解,但我确实在基于视图的 UINavigaitonController 中实现了这一点。如果你想知道我可以提供帮助 【参考方案1】:将您的第二个推送逻辑放入 viewDidAppear:
而不是 viewDidLoad
为我解决了这个问题。
您还应该考虑应用的用户体验。如果一个 viewController 只被使用几秒钟来处理一些数据并自动进入另一个 viewController,最好显示一个 UIActivityIndicator
或一个小的视觉指示器。
编辑: 您的自动推送不应在推送另一个推送之前自行弹出。
- (void)viewDidAppear:(BOOL)animated
if(1 == 1)
TwoViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"two"];
[self.navigationController pushViewController:vc animated:YES];
然后在您的TwoViewController
中您需要以编程方式调用
[self.navigationController popToRootViewControllerAnimated:YES];
为了弹回你的主视图控制器。
【讨论】:
感谢您的帮助。我已经更新了上面的答案,但它不起作用。那是你的意思吗?谢谢! 对不起,我忘了提到我还删除了[self.navigationController popViewControllerAnimated:NO];
这一行当你在SecondViewController上时,你需要为'返回'按钮创建一个IBOutlet并让它执行这个[self.navigationController popToRootViewControllerAnimated:YES];
Hmmm.. 好的整洁.. 所以没有办法做到这一点,必须覆盖视图二上的后退按钮的默认行为?我并不打算一定要调用 popToRootViewController 方法以上是关于iOS 简单视图从导航堆栈错误弹出的主要内容,如果未能解决你的问题,请参考以下文章
如何从导航堆栈中推送/弹出uiviewcontroller时收到警报