【问题标题】:Pop and push the same view does not invoke the viewWillAppear() method弹出和推送同一个视图不会调用 viewWillAppear() 方法
【发布时间】:2011-10-01 07:33:42
【问题描述】:

当我收到本地通知时,我会执行以下操作:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notif { [navController popToRootViewControllerAnimated:NO]; [navController pushViewController:notificationSplashViewController 动画:YES]; }

如果我的notificationSplashViewController 是当前的ViewController,它的viewWillAppear() 方法不会被调用。如何检测notificationSplashViewController的重推?

【问题讨论】:

  • 大胆猜测 - 如果你为流行音乐制作动画会发生什么?
  • ...一场灾难!导航栏变得疯狂,与推送的视图控制器的所有标题重叠。实际上,在控制台上我得到:nested push animation can result in corrupted navigation barFinishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
  • 嘎嘎!那很不好。不要那样做 :-) 另一个疯狂的猜测 - 将 push 移到它自己的方法(称为 thePushMethod)中,然后在 pop 之后调用该方法,如下所示:[self performSelector:@selector(thePushMethod) withObject:nil afterDelay:0.0 ];
  • 很好!有用! :) 谢谢!您能解释一下为什么这种解决方法有效吗?
  • 当你像这样调用选择器时,它不会实时执行,它会将其放入队列中以在下一个运行循环期间执行,这为第一个动画提供了足够的时间完成。

标签: objective-c uiviewcontroller uinavigationcontroller


【解决方案1】:

试试:

[notificationSplashViewController.view removeFromSuperview];
[navController popToRootViewControllerAnimated:NO];
[navController pushViewController:notificationSplashViewController animated:YES];

对我来说,这成功了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多