您不希望视图控制器的基类是 UITabBarDelegate。如果您要这样做,所有视图控制器子类都将是选项卡栏委托。我认为你想要做的是扩展 UITabBarController,如下所示:
class MyTabBarController: UITabBarController, UITabBarControllerDelegate {
然后,在该类中,重写 viewDidLoad 并将委托属性设置为 self:
self.delegate = self
注意:这是设置标签栏控制器委托。选项卡栏有自己的委托 (UITabBarDelegate),由选项卡栏控制器管理,并且不允许更改。
因此,现在这个类既是 UITabBarDelegate (因为 UITabBarController 实现了该协议),又是 UITabBarControllerDelegate,并且您可以根据需要重写/实现这些委托的方法,例如:
// UITabBarDelegate
override func tabBar(tabBar: UITabBar, didSelectItem item: UITabBarItem) {
print("Selected item")
}
// UITabBarControllerDelegate
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
print("Selected view controller")
}
我猜你可能对后者更感兴趣。查看文档以了解每个代表提供的内容。
最后一件事,在故事板中(假设您正在使用故事板),将标签栏控制器的类设置为 Identity Inspector 中的 MyTabBarController,然后就可以开始了。
斯威夫特 3/4
// UITabBarDelegate
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
print("Selected item")
}
// UITabBarControllerDelegate
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
print("Selected view controller")
}