UITabBarControllerDelegate的方法不叫

问题描述:

我以编程方式创建了多于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

你有太多的标签使用selectedIndex,因为你的其他选项卡可能是moreNavigationController即使moreNavigationController不显示在屏幕上 - 这意味着他们应该使用selectedIndex时返回NSNotFound

您应该使用selectedViewController代替,per iOS Docs

[tabbarController setSelectedViewController: yourIndexSixViewController]; 
+0

谢谢你的建议!但它不工作:( – Ragara

我做了棘手的解决方案。

我收集所有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]和委托的方法是否正确调用。