在 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
    }
}