在UITabBarController

时间:2018-06-04 09:04:03

标签: ios swift uitabbarcontroller

我如何将数据从第一个 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中仍未显示传输的数据之后。

1 个答案:

答案 0 :(得分:0)

在我看来,更好的传递数据是在tabbarcontroller类中实现的。

enter image description here

例如:

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