Передача данных между UITabBarController - PullRequest
0 голосов
/ 04 июня 2018

Как я могу передать данные из первый 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 Iнапишите что-то вроде этого:

 var transferMyString: String = NSLocalizedString("WrongString", comment: "")

 override func viewDidLoad() {
     super.viewDidLoad()
     label2.text = transferMyString
 }

Но после него все равно не отобразятся перенесенные данные в секунду Панель вкладок ViewController.

1 Ответ

0 голосов
/ 04 июня 2018

, на мой взгляд, лучшая передача данных реализована в классе 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
    }
}

секунда VC:

import UIKit

class SecondVC: UIViewController {
    @IBOutlet weak var secondLabel: UILabel!
    var stringText = ""

    override func viewDidLoad() {
        super.viewDidLoad()

        secondLabel.text = stringText
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...