在 UITabBarController 之间传递数据
Passing data between UITabBarController
如何将数据从 first TabBarVC 传递到 second?
我有一个带有一些字符串的 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.
中仍然没有显示传输的数据
在我看来,更好的数据传递是在 tabbarcontroller 中实现的 class。
例如:
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
}
}
}
第一VC:
import UIKit
class FirstVC: UIViewController {
@IBOutlet weak var firstLabel: UILabel!
var stringText = "this is from firstVC"
override func viewDidLoad() {
super.viewDidLoad()
firstLabel.text = stringText
}
}
第二VC:
import UIKit
class SecondVC: UIViewController {
@IBOutlet weak var secondLabel: UILabel!
var stringText = ""
override func viewDidLoad() {
super.viewDidLoad()
secondLabel.text = stringText
}
}
如何将数据从 first TabBarVC 传递到 second?
我有一个带有一些字符串的 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.
中仍然没有显示传输的数据在我看来,更好的数据传递是在 tabbarcontroller 中实现的 class。
例如:
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
}
}
}
第一VC:
import UIKit
class FirstVC: UIViewController {
@IBOutlet weak var firstLabel: UILabel!
var stringText = "this is from firstVC"
override func viewDidLoad() {
super.viewDidLoad()
firstLabel.text = stringText
}
}
第二VC:
import UIKit
class SecondVC: UIViewController {
@IBOutlet weak var secondLabel: UILabel!
var stringText = ""
override func viewDidLoad() {
super.viewDidLoad()
secondLabel.text = stringText
}
}