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];
它不工作。
你有太多的标签使用selectedIndex
,因为你的其他选项卡可能是moreNavigationController
即使moreNavigationController
不显示在屏幕上 - 这意味着他们应该使用selectedIndex
时返回NSNotFound
。
您应该使用selectedViewController
代替,per iOS Docs
[tabbarController setSelectedViewController: yourIndexSixViewController];
谢谢你的建议!但它不工作:( – Ragara
我做了棘手的解决方案。
我收集所有8视图控制器在分离阵列。叫它控制器。
在开始时我填写tabbarController.viewcontrollers与控制器的前5项。另外有2种情况:
- 用户希望看到一个标签与索引范围0..4内。没有什么可做的,因为我们已经将合适的视图控制器设置为tabbarController.viewcontrollers。
-
用户希望看到一个标签索引中的范围0..4。例如,用户希望看到索引为6的选项卡。例如,当前选定的选项卡具有索引2。在这种情况下,我选择范围为0的数字..4这与当前选定的标签索引不相等。例如4.另外我用tabbarController.viewcontrollers [4]替换为控制器[6]。从那以后,我打电话
[tabbarController setSelectedIndex: 4];
至于结果,我看到控制器[6]和委托的方法是否正确调用。
你确定标签栏控制器的'delegate'属性是否已设置? – rmaddy
是的。我设置了委托。当我发送[tabbar setSelectedIndex:3]时,委托的方法被正确调用;例如,对于可见标签。 – Ragara
多少标签? 6?这是一个基于0的索引,所以这不应该起作用(尽管它会崩溃)。 – brandonscript