popViewControllerAnimated:不想动画

时间:2014-02-12 13:03:32

标签: ios uinavigationcontroller autolayout pushviewcontroller popviewcontrolleranimated

我正在实施一种级联菜单。

在我的故事板中,我有一个UINavigationController作为根视图控制器UIViewController(假设它是MyViewController)。 MyViewController有一个故事板ID:“菜单” 由于此控制器是一个菜单,它显示一个tableView。单击一个单元格时,它会触发一些代码,尤其是:

UINavigationController *menuNavigator = (UINavigationController*)[self.storyboard instantiateViewControllerWithIdentifier:@"Menu"];
MyViewController *newMenu = (MyViewController*)menuNavigator.topViewController;
//Some configurations of newMenu
[self.navigationController pushViewController:newMenu animated:YES];

因为这里一切正常。

在子菜单中,最后一个单元格是“后退”单元格。当用户触摸它时,它会触发代码:

[self.navigationController popViewControllerAnimated:YES];

我在上一个菜单上正确返回,但没有动画。

我也试过了:

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];
[self.navigationController popToRootViewControllerAnimated:YES];

但我仍然没有动画。

在故事板上,我的导航控制器设置为不显示导航栏。如果我显示它,并触摸自动显示的“后退”按钮,则结果相同:没有动画。

我的代码出了什么问题?

修改
我正在使用Autolayout和ARC;

1 个答案:

答案 0 :(得分:0)

编辑:你有一些有趣的事情发生了。这行代码看起来不对:

UINavigationController *menuNavigator = (UINavigationController*)[self.storyboard instantiateViewControllerWithIdentifier:@"Menu"];

看起来您试图通过实例化视图控制器来获取导航控制器。我不明白为什么你需要这样的导航器。您只需使用self.navigationController获取导航控制器。

我做了类似的事情,我的代码如下所示。

didSelectRowAtIndexPath:方法中,我没有通过storyboard对象进行实例化,而是:

    DVSecondTableViewController *vc = [[DVSecondTableViewController alloc] init];
    [self.navigationController pushViewController:vc animated:YES];

要返回,我只使用导航控制器提供的“后退”按钮,因此我无法帮助您。