Как передать данные между контроллером представления и контроллерами представления панели вкладок, используя segue? - PullRequest
0 голосов
/ 07 октября 2019

введите описание изображения здесь

Я также добавил скриншот дизайна.

У меня есть один контроллер представления A и панель вкладок с двумя контроллерами представления B,C.

Я хочу передать данные переменной data из VcA -> VcB через панель вкладок.

Я перетащил переход с submitbutton на TabBar.

Я попытался передать данные с помощью segue

Так что, пожалуйста, помогите мне из этого.

//In  View controller A
class ViewControllerA : UIViewController{
var data : String = ""
    @IBAction func submitButtonTapped(_ sender: Any) {   
    performSegue(withIdentifier: "homePage", sender: nil)
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let vc = self.tabBarController!.viewControllers![0] as! ViewControllerB

     vc.containsData = data

    }

}
//In Tabbar View controller B
class ViewControllerB: UIViewController {
    var containsData : String = ""
    override func viewDidLoad() {
        super.viewDidLoad()
    print(containsData)

    }
}

В контроллере панели вкладокB Я только что напечатал переменную"данные" в viewDidLoad ()

Ответы [ 3 ]

3 голосов
/ 16 октября 2019

я получил ответ

    @IBAction func submitButonTapped(_ sender: Any) {
            performSegue(withIdentifier: "homePage", sender: self)
    }
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let barViewControllers = segue.destination as! UITabBarController
        let destinationViewController = barViewControllers.viewControllers![0] as! ViewControllerB
        destinationViewController.containsData = Data
    }
1 голос
/ 07 октября 2019

Глядя на код, я разобрался с проблемами.

Сначала вам нужно использовать метод prepare(for segue для передачи данных, когда вы представляете viewControllerb с помощью segue. Итак, в вашем ViewController добавьте этот метод и установите данные для ViewControllerb, как показано ниже,

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if let tabController = segue.destination as? UITabBarController {
        let bController = tabController.children.first(where: { $0 is ViewControllerb })
        (bController as? ViewControllerb)?.containsData = self.stringTF.text!
    }
    super.prepare(for: segue, sender: sender)
}

Во-вторых, удалите метод submitButtonTapped из ViewController, потому что вы представляете ViewControllerb, используя segue, так чтоне требуется. Также удалите этот метод в раскадровке, нажав крестик, как показано на изображении ниже

enter image description here

0 голосов
/ 07 октября 2019

Если вы передаете данные viewController -> Tabcontroller, используя NavigationController. пожалуйста, попробуйте код удара на кнопке / tableViewCell / collectionViewCell Click / Press


let navController = self.Your_TABBAR_CONTROLLER.viewControllers![Tab_Index] as! UINavigationController
let vc = navController.topViewController as! Your_View_Controller
vc.name = Data

let navController = self.tabBarController.viewControllers![1] as! UINavigationController
let vc = navController.topViewController as! HomeViewController
vc.name= self.name
...