我想在用户点击UITabBar中的某些选项卡而不打开另一个视图时执行操作。例如,设置选项卡或共享。这是我做的:
class ViewTabBarController: UITabBarController,UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
// Do any additional setup after loading the view.
}
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
print("do something")
}
}
如果UITabBar只有5个项目,此代码可以正常工作。但问题是,如果UITabBar有超过5个项目,那么“更多选项卡”下的项目在单击时不会调用tabBar()函数。
从UITabBarControllerDelegate的didSelect方法的文档描述:
告知代理用户在选项卡栏中选择了一个项目。
这意味着当用户点击栏中的一个按钮时调用该方法。如果你有一个“更多”按钮,那么这就是标签栏中的按钮,因此点击“更多”会触发该方法。
“更多”部分中的视图控制器实际上以涉及使用UINavigationController的不同方式进行处理。使用这些视图,它们在选项卡栏中没有按钮,因此甚至不会触发。