我对斯威夫特不熟悉。在我的项目中,我正在实现tabbar控制器,并面临一些设计困难。我的目标是当用户单击一个选项卡栏项时,它不应该导航到另一个视图控制器。它应该保持在当前视图中,并向当前视图控制器添加一个弹出视图。我已经尝试过,但总是导航到下一个视图控制器。
最佳答案
创建一个UITabBarController
子类并将该类用于选项卡栏控制器。如果不想导航到视图控制器,请在选项卡栏控制器中确认UITabBarControllerDelegate
,并在tabBarController shouldSelect
方法中返回false。在这里您可以显示弹出视图。
class TabbarController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
delegate = self
}
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if let navigationController = viewController as? UINavigationController,
navigationController.viewControllers.contains(where: { $0 is MoreViewController }) {
//show pop up view
return false
} else {
return true
}
}
}
或者您可以在它的一个嵌入式视图控制器中添加
UITabBarControllerDelegate
,如下所示class ViewController: UIViewController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.tabBarController?.delegate = self
}
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
if let navigationController = viewController as? UINavigationController,
navigationController.viewControllers.contains(where: { $0 is MoreViewController }) {
//show pop up view
return false
} else {
return true
}
}
}