如何将数据从 ViewController 传递到标签栏 iOS 中的 ViewController?

How to pass data from ViewController to a ViewController in a tab bar iOS?

我正在尝试将数据从我的主 ViewController 传递到标签栏中的另一个 ViewController。

我试过使用下面的代码,但得到了 Could not cast value of type 'Test.FirstViewController''Test.ViewController'

的错误
override func viewWillAppear(_ animated: Bool)
{
    super.viewWillAppear(animated)
    let tab1Controller = self.tabBarController?.viewControllers?.first as! ViewController
    print(tab1Controller.test)
}

你可以做很多事情,我要做的就是创建一个全局变量,以便两个视图控制器都可以访问它。另一种选择是给每个视图控制器一个单独的全局变量,当加载视图时,变量设置为self,然后创建一个可以由另一个视图控制器设置的变量。

示例:

var data:Any?
viewDidLoad() {
    viewControllerA = self
}

我刚刚使用了以下代码,它在 Xcode 9 和 swift 4.0 上对我来说效果很好。以下方法在视图控制器 class 中声明,它仅显示第一个视图控制器。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "sendingToTabBar" {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let tabVC = storyboard.instantiateViewController(withIdentifier: "tabVC") as! UITabBarController
        self.present(tabVC, animated: true, completion: {
            let vc = tabVC.selectedViewController as! FirstViewController
            vc.dataLBL.text = self.dataTF.text!
        })
    }
}

您可以在 ViewController prepare 方法中访问选项卡栏控制器并设置您的值。

准备转场

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let barViewControllers = segue.destination as! UITabBarController
    let destinationViewController = barViewControllers.viewControllers?[0] as! FirstViewController
    destinationViewController.test = "Hello TabBar 1"

    // access the second tab bar
    let secondDes = barViewControllers.viewControllers?[1] as! SecondViewController
    secondDes.test = "Hello TabBar 2"
}

然后在你的tab bar ViewControllers声明变量,你想设置值。

@IBOutlet weak var label: UILabel!
var test: String?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    label.text = test
}

FirstViewController

SecondViewController