2017-08-23 22 views
1

我以編程方式創建了多於5個選項卡(恰好8個子視圖控制器)的UITabBarController。UITabBarControllerDelegate的方法不叫

我的目的是改變標籤的自定義過渡動畫。我設置了一個的UITabBarController委託和實現方法:

- (nullable id <UIViewControllerAnimatedTransitioning>)tabBarController:(UITabBarController *)tabBarController 
      animationControllerForTransitionFromViewController:(UIViewController *)fromVC 
               toViewController:(UIViewController *)toVC 

當我通過發送選擇標籤:

[tabbarController setSelectedIndex: 6]; 

委託的方法不叫。

當我發送

[tabbarController setSelectedIndex: 3]; 

例如,即對於一個可見標籤代表的方法是否正確調用。

再說一句:如果當前選定的視圖控制器位於可見範圍0..3且下一個視圖不在可見範圍內0..3委託的方法仍然被調用。如果當前選擇的視圖控制器超出可視範圍0..3,且下一個視圖超出可視範圍0..3,則不調用該委託的方法。我失去了我的自定義過渡動畫。這是我的問題。

我也試過送

[tabbarController setSelectedViewController: someViewController]; 

代替

[tabbarController setSelectedIndex: 6]; 

它不工作。

+0

你確定標籤欄控制器的'delegate'屬性是否已設置? – rmaddy

+0

是的。我設置了委託。當我發送[tabbar setSelectedIndex:3]時,委託的方法被正確調用;例如,對於可見標籤。 – Ragara

+0

多少標籤? 6?這是一個基於0的索引,所以這不應該起作用(儘管它會崩潰)。 – brandonscript

回答

0

你有太多的標籤使用selectedIndex,因爲你的其他選項卡可能是moreNavigationController即使moreNavigationController不顯示在屏幕上 - 這意味着他們應該使用selectedIndex時返回NSNotFound

您應該使用selectedViewController代替,per iOS Docs

[tabbarController setSelectedViewController: yourIndexSixViewController]; 
+0

謝謝你的建議!但它不工作:( – Ragara

0

我做了棘手的解決方案。

我收集所有8視圖控制器在分離陣列。叫它控制器

在開始時我填寫tabbarController.viewcontrollers控制器的前5項。另外有2種情況:

  1. 用戶希望看到一個標籤與索引範圍0..4內。沒有什麼可做的,因爲我們已經將合適的視圖控制器設置爲tabbarController.viewcontrollers
  2. 用戶希望看到一個標籤索引中的範圍0..4。例如,用戶希望看到索引爲6的選項卡。例如,當前選定的選項卡具有索引2。在這種情況下,我選擇範圍爲0的數字..4這與當前選定的標籤索引不相等。例如4.另外我用tabbarController.viewcontrollers [4]替換爲控制器[6]。從那以後,我打電話

    [tabbarController setSelectedIndex: 4]; 
    

至於結果,我看到控制器[6]和委託的方法是否正確調用。