【问题标题】:popViewControllerAnimated: doesn't want to animatepopViewControllerAnimated:不想动画
【发布时间】:2014-02-12 13:03:31
【问题描述】:

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

在我的故事板中,我有一个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];

但我仍然没有动画。

在故事板上,我的导航控制器设置为不显示导航栏。如果我显示它,然后触摸自动出现的“后退”按钮,结果是一样的:没有动画。

我的代码有什么问题?

编辑
我正在使用自动布局和 ARC;

【问题讨论】:

  • 远射:您是否可能错过在您的任何viewDidLoadviewWillDisappear、...方法中调用[super ...]
  • 我只是覆盖viewDidLoadviewDidAppear:。第二个缺少super 调用,但即使这样,它仍然没有动画。
  • 确定你在调用 [super viewDidAppear] 和 [super viewDidLoad] 吗?
  • 当然。一个奇怪的行为是viewDidAppear: 在使用popViewControllerAnimated:“弹出”子菜单时没有在根控制器上调用。
  • 你有没有打电话给[UIView +setAnimationsEnabled:]?您可以检查[UIView +areAnimationsEnabled] 是否返回YESNO

标签: ios uinavigationcontroller autolayout pushviewcontroller popviewcontrolleranimated


【解决方案1】:

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

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

您似乎试图通过实例化视图控制器来获取导航控制器。我不明白你为什么需要这样的导航器。您可以简单地使用self.navigationController 获取导航控制器。

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

didSelectRowAtIndexPath: 方法中,我不通过情节提要对象进行实例化,而是这样做:

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

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

【讨论】:

  • 我一直在没有故事板的情况下以编程方式创建我的视图。 (顺便说一句,我不明白你为什么用 nil 参数调用 initWithNibName:bundle: 而不是 init...)我的问题还是一样。自动布局约束会出错吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多