2014-10-16 41 views
2

我想從ViewController1向ViewController2添加過渡動畫。下圖顯示了BaseTabBarController和TableViewController。 BaseTabBarController具有名爲(BaseTabBarController)的.h和.m文件。如果我將在基本選項卡欄中添加任何視圖,那麼它將被添加到TableViewController中。我從TableViewController推送第三個ViewController。因此,在下面的代碼中,來自VC的應該是TableViewController,但它包含BaseTabBarViewController。我無法知道這裏發生了什麼?請提出任何解決方案,以便我可以繼續前進。我會感謝你們所有人。 enter image description hereUITransitionContextFromViewControllerKey返回錯誤ViewController

-(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext 
{ 
    UIViewController <ZoomTransitionProtocol> * fromVC = (id)[transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; 
    UIViewController <ZoomTransitionProtocol> *toVC = (id)[transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; 
    UIView * containerView = [transitionContext containerView]; 
    UIView * fromView = [fromVC view]; 
    UIView * toView = [toVC view]; 

    [containerView addSubview:toView]; 

    UIView * zoomFromView = [fromVC viewForZoomTransition]; 
    UIView * zoomToView = [toVC viewForZoomTransition]; 

//Code is continuing… 

} 

回答

0

我想通了這個問題,並解決它,完美的工作。

解決方案: 查找到下面的截圖: enter image description here

你會發現,首先,導航控制器是地方,然後視圖控制器;之後,將會有一個TabBarController; TabBarController的第一個項目是TableViewController; 當我們從任何tabBar項目中推動任何視圖控制器時,它會推動,因爲我們有根控制器;因此,無需爲每個選項卡添加單獨的導航控制器。

但是UITransitionContextFromViewControllerKey將返回BaseTabBar類。所以爲了解決這個問題,我爲tabBar項目添加了一個新的導航控制器。現在它將返回正確FromViewCotroller。 以下是正確的屏幕截圖: enter image description here

+0

我正在嘗試做類似的事情。但我得到***終止應用程序由於未捕獲的異常'NSInvalidArgumentException',原因:' - [UINavigationController setThing:]:無法識別的選擇器發送到實例0x7fc86b5ab1e0',因爲我試圖傳遞一些數據到模態視圖 - 你必須爲新的導航控制器設置一個控制器? – 2014-11-12 16:14:56

+0

@GabrielMSharp我剛剛添加了一個導航控制器;如果你需要傳遞一些參數,那麼你需要像故事板中那樣做。 – msmq 2014-11-13 10:54:59