UITabBarControllerDelegate

UITabBarControllerDelegate

我对斯威夫特不熟悉。在我的项目中,我正在实现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
        }
    }
}

10-06 13:57