【问题标题】:iOS Simple View Pop from Navigation Stack ErroriOS 简单视图从导航堆栈错误弹出
【发布时间】: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 中实现了这一点。如果你想知道我可以提供帮助

标签: ios objective-c iphone uinavigationcontroller uistoryboardsegue


【解决方案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 方法
猜你喜欢
  • 2018-04-12
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多