尝试使用动画

时间:2016-08-05 12:21:05

标签: ios objective-c uinavigationcontroller quartz-core

我有代码在UINavigation控制器堆栈上存储对3个Viewcontrollers(比如类typeA)的引用,后来所有这些视图控制器都从堆栈中弹出。

稍后点击按钮,我会尝试正常推送2个视图控制器,然后对于第3个视图控制器,我正在使用以下方法。

[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];

导航以这种方式发生 classTypeA VC1-- > classTypeA VC2 --> classTypeA VC3 --> "class TypeB VC" --> classTypeA VC1-- > classTypeA VC2 --> classTypeA VC3 --> "class TypeB VC" --> classTypeA VC1-- > classTypeA VC2 --> classTypeA VC3 --> "class TypeB VC"(此时它会兑现)。

当用户导航缓慢时,此代码效果很好,但如果用户更快点击按钮,则会出现异常崩溃:

  

由于未捕获的异常而终止应用   'NSInvalidArgumentException',原因:'推送相同的视图   不支持多次使用控制器实例'。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

看起来您要在viewcontroller中放置yourNavigationViewController的两个实例,因此在推送viewcontroller之前,您应该移除实例(如果存在的话) -

func RemoveViewControllersFromNavigationController(vcClass:AnyClass)->Void
{

        let array = self.navigationController?.viewControllers


        if array != nil
        {
            for aviewcontroller  in array!
            {
                if aviewcontroller.isKindOfClass(vcClass)
                {
                   self.navigationController?.viewControllers.removeAtIndex( (self.navigationController?.viewControllers.indexOf(aviewcontroller))!)
                }
            }

        }

}

在推送viewcontroller

之前调用上述方法
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
            let vc  = mainStoryboard.instantiateViewControllerWithIdentifier("EventDetailViewController") as! EventDetailViewController
                   RemoveViewControllersFromNavigationController(EventDetailViewController)
            self.navigationController?.pushViewController(vc, animated: true)