导航控制器popViewControllerAnimated:yes未按预期工作

use*_*955 14 uinavigationcontroller ios popviewcontrolleranimated

我正在使用以下代码行:

[self.navigationController popViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)

但它在ios 7中表现不像在ios 6中那样.有些时候它不会弹出控制器,而我们连续按下按钮2-3次.
导致导航栏中出现突然行为并取消分配控制器但在ui上显示相同的内容.
因此,当我们按下该控制器上的任何内容时,由于控制器已经被释放,因此导致崩溃.

cyn*_*six 9

检查您是否在UI线程上运行代码

  • dispatch_async(dispatch_get_main_queue(),^ {[(UINavigationController*)tabBarController.selectedViewController popToRootViewControllerAnimated:NO];}); 我遇到了类似的问题 (2认同)

Sun*_*hah 7

[self.navigationController popToRootViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)

此方法将导航到navigationController的根目录.

您可以使用以下代码检查您的viewController层次结构.

    NSLog(@"%@",self.navigationController.viewControllers);
Run Code Online (Sandbox Code Playgroud)


小智 5

我通过以下方式解决了这个问题:

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                                                                     UINavigationController * nav = tabbarControl.selectedViewController;
                                                                     [nav.viewControllers objectAtIndex:0];
[nav setViewControllers:@[[nav.viewControllers objectAtIndex:0]] animated:NO];
                                                                tabbarControl.selectedIndex = 0;
 });
Run Code Online (Sandbox Code Playgroud)

当您延迟一秒钟时,视图将从UI弹出,然后视图将从导航堆栈弹出,我认为这是动画序列的问题。


Mac*_*Dev -1

尝试使用此代码从导航堆栈中弹出视图控制器

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count -2] animated:YES];
Run Code Online (Sandbox Code Playgroud)