如何从嵌入视图进入标签栏?

问题描述 投票:2回答:1

我的应用程序中有一个标签栏控制器,有4个标签。其中一个应该根据API的响应显示2个场景中的一个:如果没有数据则为空视图;如果有数据则为分段控件。以下是设置的故事板:

Tab bar storyboard Views storyboard

在空视图和带有数据的视图上,我都有一个按钮,可以“单击”选项卡栏上的一个按钮(切换到另一个选项卡)。

现在这就是我正在做的事情:

显示包含数据的视图:

class EmptyTasksVC: ViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        if(there_is_data){
            let storyboard = UIStoryboard(name: "TaskTodoList", bundle: nil)
            let vc = storyboard.instantiateViewController(withIdentifier: "TaskListSegmentedControl")

            let childNavigation = UINavigationController(rootViewController: vc)
            childNavigation.willMove(toParent: self)
            addChild(childNavigation)
            childNavigation.view.frame = view.frame
            view.addSubview(childNavigation.view)
            childNavigation.didMove(toParent: self)
         }
    }
}

在按钮上查找标签栏,从视图中单击数据:

@objc func newTaskAction(sender: UIButton!) {
    let viewController = self.findViewController()
    let tabBar = viewController?.parent?.parent?.parent?.parent?.parent as! UITabBarController
    tabBar.selectedIndex = 2
}
...

extension UIView {
    func findViewController() -> UIViewController? {
        if let nextResponder = self.next as? UIViewController {
            return nextResponder
        } else if let nextResponder = self.next as? UIView {
            return nextResponder.findViewController()
        } else {
            return nil
        }
    }
}

如果我想从空视图到达按钮,我必须从链中删除2个“父母”。

必须有一个更好的方法来做到这一点......我的架构是错的吗?如果我不知道有多少视图,我如何从嵌入视图进入标签栏?

swift uitabbarcontroller navigationcontroller
1个回答
1
投票

一个ViewController已经有一个属性tabBarController描述为

//如果视图控制器有一个标签栏控制器作为其祖先,请将其返回。否则返回nil。

所以你可以直接访问你的viewController嵌入的TabBar Controller

self.tabBarController?.selectedIndex = 2
© www.soinside.com 2019 - 2024. All rights reserved.