如何从UITabBarViewController获取对View Controller的引用

时间:2017-07-25 17:53:37

标签: ios swift swift3 uiviewcontroller uitabbarcontroller

编辑:我的方法不合适。我试图将数据从一个VC传递到另一个VC。源VC不受Tab栏控制,因此我无法通过它引用目标VC。我试图通过故事板引用目标VC,但目标VC上的数据仍为零。我正在使用Core Data并希望将ManagedObjectContext传递给另一个VC。这是代码:

......
                    do {
                        try self.managedObjectContext.save()
                        appUserID = user.userID!
                        } catch {
                        fatalError("Error: \(error)")
                    }
                }
            }
        self.passManagedObjectContext()
    }

    func passManagedObjectContext() {
        let profileTableViewController = UIStoryboard(name: "Profile", bundle: nil).instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileTableViewController
            profileTableViewController.managedObjectContext = self.managedObjectContext
        }


I am passing data from the AppDelegate to other ViewControllers by referencing my TabBarViewControllers stack like so:



    let tabBarController = window!.rootViewController as! UITabBarController
        if let tabBarViewControllers = tabBarController.viewControllers {
            let profileNavController = tabBarViewControllers[4] as! UINavigationController
            let profileTableViewController = profileNavController.topViewController as! ProfileTableViewController
            profileTableViewController.managedObjectContext = context
        }
    }
.....

结束编辑 我现在尝试做同样的事情,但从一个ViewController到另一个通过标签栏访问(没有segue)。上面的代码无法识别window!.rootViewController如何引用根UITabBarController?

1 个答案:

答案 0 :(得分:0)

UIViewController有一个内置的可选属性tabBarController,因此您可以在视图控制器中访问tabBarController,如下所示:

if let tabBarController = tabBarController {
    //get the controller you need from
    //tabBarController.viewControllers
    //and do whatever you need
}

以下是Apple's UIViewController documentation的“获取其他相关视图控制器”部分中可用的当前属性列表:

UIViewController: 'Getting Other Related View Controllers'