首页 文章

在ViewController和TabBarController之间传递数据

提问于
浏览
6

我有几个问题 . 如何将数据(我在Alamofire请求完成后得到的)传递给TabBarController的一个子节点?

我遇到的第一个问题是我无法覆盖登录操作中的func prepareForSegue(当点击按钮时),它说我只能覆盖类成员 . 但是,如果我把功能放在IBAction之外,那么我将不会发送我需要的数据 .

第二个问题是,当我将覆盖的函数放在IBAction之外时,代码看起来像这样:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

            let homeVC = segue.destinationViewController as HomeViewController
            homeVC.templateForCell = templates
        }

当我运行它时,我得到了错误:

无法将'UITabBarController'类型的值转换为HomeViewController'

(HomeViewController是我的目标视图,我应该从Alamofire传递数据) .

2 回答

  • 2

    您不一定需要使用prepareForSegue . 只需在TabBarController viewControllers数组中引用所需的ViewController并将其强制转换 .

    let vc = self.tabBarController.viewControllers![1] as! HomeViewController
    vc.templateForCell = templates
    

    如果TabBar中的ViewControllers嵌入在导航控制器中,则可以执行以下操作:

    let navController = self.tabBarController.viewControllers![1] as! UINavigationController
    let vc = navController.topViewController as! HomeViewController
    vc.templateForCell = templates
    
  • 9

    对于Xcode 8,Swift 3.x,您可以使用以下内容 . 假设您将视图控制器嵌入导航控制器中 . 在我的情况下,我试图在从新用户设置视图导航时将名为 startWizard 的变量设置为true .

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if (segue.identifier == "segueFromNewUserToDashboard") {
            let dashboardController = segue.destination as! MyTabBarController
            for viewController in dashboardController.viewControllers! {
                let navViewController = (viewController as! MyNavigationController).topViewController!
                if (navViewController.isKind(of: DashboardViewController.self) == true) {
                    (navViewController as! DashboardViewController).startWizard = true
                    break
                }
            }
        }
    }
    

相关问题