我以编程方式创建一个包含5个以上选项卡的UITabBarController(正好是8个子视图控制器)。
我的目的是更改标签的自定义过渡动画。我为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 :(得分:0)
您有太多标签要使用selectedIndex
,因为即使屏幕上未显示moreNavigationController
,您的其他标签也可能在moreNavigationController
中 - 这意味着它们应该返回NSNotFound
1}}使用selectedIndex
时。
您应该使用selectedViewController
代替per iOS Docs
[tabbarController setSelectedViewController: yourIndexSixViewController];
答案 1 :(得分:0)
我做了棘手的解决方案。
我以分离的数组收集所有8个视图控制器。称之为控制器。
首先,我使用控制器的前5项填充 tabbarController.viewcontrollers 。此外还有两种情况:
用户希望在范围0..4 之外看到索引的标签。例如,用户想要查看索引为6的选项卡。例如,当前选择的选项卡具有索引2。在这种情况下,我选择0..4范围内的数字,该数字与当前选择的选项卡索引不相等。例如4.此外,我将 tabbarController.viewcontrollers [4] 替换为 controllers [6] 。之后我打电话给
[tabbarController setSelectedIndex: 4];
结果我看到 controllers [6] 并且正确调用了委托的方法。