【问题标题】:How to get to a tab bar from the embedded view?如何从嵌入视图进入标签栏?
【发布时间】:2019-04-10 12:46:32
【问题描述】:

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

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

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

用数据显示视图:

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】:

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

    // 如果视图控制器有一个标签栏控制器作为它的祖先, 把它返还。否则返回 nil。

    所以你可以直接访问你的viewController嵌入的TabBarController,

    self.tabBarController?.selectedIndex = 2
    

    【讨论】:

    • 我认为这不适用于嵌入在容器视图中的控制器。
    • 我现在感觉自己像个白痴。出于某种原因,我认为如果我不在 tabBarViewController 中,就无法访​​问它。谢谢你,好心的先生!
    • @MartaPanuszewska 没关系,这是过程的一部分。继续工作:)
    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    相关资源
    最近更新 更多