推送视图控制器时应用程序冻结

时间:2018-05-30 07:06:09

标签: ios objective-c

最近我遇到了将UIViewController推送到UINavigationViewController的错误,我找到了解决方法。

错误情景:

如何推送UIViewController(通过segue,使用pushViewController,...)并不重要。在NavigationViewController的RootViewController中,尝试使用滑动后退手势! (什么都不应该发生),然后尝试通过点击一个元素将ViewController推入您的NavigationViewController。 =>应用程序冻结!在这里,如果您通过XCode捕获屏幕,您会发现当前可见屏幕是下一个屏幕!! (但它不是!),Cpu使用和任何其他事情是正常的。 你可以通过另一种轻扫手势退出App Freezing!

以下是解决方案:

在您的BaseNavigationViewController(扩展UINavigationViewController)中插入这些代码(特别是当您使用UITabbarNavigationViewController时)

- (void)navigationController:(UINavigationController *)navigationController
   didShowViewController:(UIViewController *)viewController
                animated:(BOOL)animate {
    if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
      if (self.viewControllers.count > 1) {
        self.interactivePopGestureRecognizer.delegate = self;
        self.interactivePopGestureRecognizer.enabled = YES;
      } else {
        self.interactivePopGestureRecognizer.delegate = nil;
        self.interactivePopGestureRecognizer.enabled = NO;
      }
    }
}
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
   if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
      return self.viewControllers.count > 1;
   }
   return NO;
}

不要忘记写这些代码:

在BaseNavigationViewController的viewDidLoad中:

self.delegate = self;

并且您的BaseNavigationViewController必须使用以下两个协议: UINavigationControllerDelegateUIGestureRecognizerDelegate

0 个答案:

没有答案