具有自定义操作的 TabBar 控制器

TabBar Controller with custom action

我是 swift 的新手。我在我的项目中实现标签栏控制器并面临一些设计困难。我的目标是当用户单击一个选项卡栏项目时,它不应该导航到另一个视图控制器。它应该停留在当前视图中并向当前视图添加一个弹出视图 controller.I 已尝试但总是导航到下一个视图控制器。

创建一个 UITabBarController subclass 并将该 class 用于您的标签栏控制器。当您不想导航到视图控制器时,在选项卡栏控制器中确认 UITabBarControllerDelegate 并在 tabBarController shouldSelect 方法中确认 return 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: { [=10=] 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: { [=11=] is MoreViewController }) {
            //show pop up view
            return false
        } else  {
            return true
        }
    }
}