我如何将数据从第一个 TabBarVC传递到第二个?
我有一个UILabel
,其中包含一些字符串,每次我在UITableView
中选择另一个单元格时都会更新。
但是,例如,我只有String
var和UILabel
。
var myString: String = NSLocalizedString("MyString1", comment: "")
override func viewDidLoad() {
super.viewDidLoad()
label1.text = myString
}
我尝试创造一个功能:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "TbVC1toTbVC2") {
if let nextViewController = segue.destination as? TbVC2 {
nextViewController.transferMyString = myString
}
}
}
在TbVC2中我写了这样的东西:
var transferMyString: String = NSLocalizedString("WrongString", comment: "")
override func viewDidLoad() {
super.viewDidLoad()
label2.text = transferMyString
}
但是在第二个标签栏ViewController中仍未显示传输的数据之后。
答案 0 :(得分:0)
在我看来,更好的传递数据是在tabbarcontroller类中实现的。
例如:
import UIKit
class TabBarViewController: UITabBarController {
var firstVC = FirstVC()
var secondVC = SecondVC()
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
// Create Tab one
firstVC = storyBoard.instantiateViewController(withIdentifier: "firstVC") as! FirstVC
let tabOneBarItem = UITabBarItem(title: "Tab 1", image: UIImage(named: "defaultImage.png"), selectedImage: UIImage(named: "selectedImage.png"))
firstVC.tabBarItem = tabOneBarItem
// Create Tab two
secondVC = storyBoard.instantiateViewController(withIdentifier: "secondVC") as! SecondVC
let tabTwoBarItem2 = UITabBarItem(title: "Tab 2", image: UIImage(named: "defaultImage2.png"), selectedImage: UIImage(named: "selectedImage2.png"))
secondVC.tabBarItem = tabTwoBarItem2
self.viewControllers = [firstVC, secondVC]
}
}
// MARK: - Delegate
extension TabBarViewController: UITabBarControllerDelegate {
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
if let secondVC = viewController as? SecondVC {
secondVC.secondLabel.text = firstVC.firstLabel.text
}
}
}
firstVC:
import UIKit
class FirstVC: UIViewController {
@IBOutlet weak var firstLabel: UILabel!
var stringText = "this is from firstVC"
override func viewDidLoad() {
super.viewDidLoad()
firstLabel.text = stringText
}
}
secondVC:
import UIKit
class SecondVC: UIViewController {
@IBOutlet weak var secondLabel: UILabel!
var stringText = ""
override func viewDidLoad() {
super.viewDidLoad()
secondLabel.text = stringText
}
}