如何将数据从 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
我正在尝试将数据从我的主 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