未调用UINavigationControllerDelegate方法

时间:2015-05-21 06:59:23

标签: ios objective-c uinavigationcontroller uiinterfaceorientation

您好! 在我的应用程序中,我使用自定义转换。并且以这种方式可能发生一种情况,然后app引发了异常:

  

UINavigationController的开始/结束外观转换的非平衡调用“。

我通过覆盖UINavigationController的push / pop / set方法并采用协议UINavigationControllerDelegate解决了这种情况。这个解决方案允许我将转换块放入数组,称为“堆栈”,并逐个调用它们。我实现了这两种方法:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    @synchronized (self.stack) {
        self.transitioning = YES;
        if ([navigationController.topViewController respondsToSelector:@selector(transitionCoordinator)]) {
            id <UIViewControllerTransitionCoordinator> transitionCoordinator = [navigationController.topViewController transitionCoordinator];
            [transitionCoordinator notifyWhenInteractionEndsUsingBlock:^(id <UIViewControllerTransitionCoordinatorContext> context) {
                if ([context isCancelled]) {
                    @synchronized (self.stack) {
                        self.transitioning = NO;
                    }
                }
            }];
        }
    }
}

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    @synchronized(self.stack) {
        self.transitioning = NO;
        [self runNextBlock];
    }
}

我的应用程序支持三种界面方向:纵向,横向左侧和横向右侧。有些UIViewControllers使用纵向方向,有些使用横向(左/右)方向。我有两个导航控制器。一个导航控制器(带有纵向视图控制器)以模态方式显示另一个导航控制器(带有横向视图控制器)。

如果我以另一个界面方向显示视图控制器,则在8.0之前的iOS版本上没有调用委托方法navigationController:didShowViewController:animated:

解决此问题的任何解决方案?

0 个答案:

没有答案