popViewController 在 iOS 9 中不起作用

Posted

技术标签:

【中文标题】popViewController 在 iOS 9 中不起作用【英文标题】:popViewController not working in iOS 9 【发布时间】:2016-05-12 05:29:38 【问题描述】:

我从 BaseViewController 继承了我的 ViewController,并使用情节提要 ID 推送了我的 SecondViewController。但是,当我尝试从第二个视图弹出视图到视图控制器时,它不起作用。 这是我的代码:

dispatch_async(dispatch_get_main_queue(), ^
                [self showMesssgeonAlert:@"Success"];
                [self hideProgress];
                [self.navigationController popViewControllerAnimated:TRUE];
            );

即使我尝试过:

NSArray *controllerArray = self.navigationController.viewControllers;

for (id controller in controllerArray)

    if ([controller isKindOfClass:[ViewController class]])
    
[self.navigationController popViewControllerAnimated:TRUE];
    

但是,它在这两种情况下都不起作用。我该怎么办?请帮助我。

【问题讨论】:

您检查self.navigationController 是否不是nil 确保两个视图控制器在同一个 UINavigationController 堆栈上? 【参考方案1】:

确保您将控制器 SecondViewController 推送到 ViewController 上,如果您使用的是 segue,请检查显示类型,如(Push,Present Modally)。如果这是正确的,那么检查导航控制器对象,它应该有一个对象。

最后在两个视图控制器做加载方法中检查导航控制器的内存地址。它应该相同。

【讨论】:

【参考方案2】:

您应该仔细检查:

    两个视图控制器应该在同一个导航控制器堆栈上。

    我猜,第二个视图控制器在不同的导航控制器上。

    你是如何推送到第二个视图控制器的?

【讨论】:

如何检查视图控制器是否在不同的导航控制器上?并且我正在 pushViewController:animated: 在发生现有转换或演示时调用 ;导航堆栈不会更新。 只打印:[self.navigationController viewControllers]【参考方案3】:

尝试使用 appDelegates 导航控制器,尝试如下:

dispatch_async(dispatch_get_main_queue(), ^
                [self showMesssgeonAlert:@"Success"];
                [self hideProgress];
                [((AppDelegate*)[[UIApplication sharedApplication]delegate]).navigationController popViewControllerAnimated:TRUE];
            );

【讨论】:

【参考方案4】:

拆分视图控制器可能会导致此问题,在我的情况下,我将其删除,popViewController 开始工作。

【讨论】:

以上是关于popViewController 在 iOS 9 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 7 中打开 popviewcontroller 时出错

在 iOS 的 iphone 和 iPad 中显示 UI PopViewController 中心

iOS6横向应用程序只有一个控制器多向popViewController问题

popViewController 不会删除 UINavigationBar 项目

PopViewController 没有效果

prepareForSegue 和 popViewController 的兼容性