2017-11-05 1 views
0

Ich versuche, Daten von meinem Haupt-ViewController zu einem anderen ViewController in einer Tab-Leiste zu übergeben.Wie übertrage ich Daten von ViewController zu einem ViewController in einer Tab-Leiste iOS?

enter image description here

Ich habe versucht, den folgenden Code verwenden, und bekam einen Fehler Could not cast value of type 'Test.FirstViewController' zu 'Test.ViewController'

override func viewWillAppear(_ animated: Bool) 
{ 
    super.viewWillAppear(animated) 
    let tab1Controller = self.tabBarController?.viewControllers?.first as! ViewController 
    print(tab1Controller.test) 
} 
+0

@ Matt, wenn ich setzen Sie ihn auf 'wie! FirstViewController "dann habe ich keinen Zugriff auf die Variablen in' ViewController', der Punkt ist Ich möchte Daten von 'ViewController' an den View-Controller der Tab-Leiste übergeben. –

Antwort

0

können Sie die Controller Tableiste Zugriff in Ihrer ViewControllerprepare Methode und Ihre Werte gesetzt.

für segue Bereiten

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    let barViewControllers = segue.destination as! UITabBarController 
    let destinationViewController = barViewControllers.viewControllers?[0] as! FirstViewController 
    destinationViewController.test = "Hello TabBar 1" 

    // access the second tab bar 
    let secondDes = barViewControllers.viewControllers?[1] as! SecondViewController 
    secondDes.test = "Hello TabBar 2" 
} 

dann in der Tab-Leiste Viewcontrollers Variablen zu deklarieren, können Sie die Werte einstellen möchten.

@IBOutlet weak var label: UILabel! 
var test: String? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    label.text = test 
} 

FirstViewController

enter image description here

SecondViewController

enter image description here

-1

Sie eine Reihe von Dingen tun könnten, was würde ich tun, ist nur eine globale Variable zu machen damit beide View-Controller darauf zugreifen können. Eine andere Option besteht darin, jedem View-Controller eine separate globale Variable zu geben, und wenn die View geladen wird, wird die Variable auf self gesetzt und dann eine Variable erstellt, die vom anderen View-Controller gesetzt werden kann.

Beispiel:

var data:Any? 
viewDidLoad() { 
    viewControllerA = self 
} 
1

Ich benutzte nur den folgenden Code, die gerade fein auf Xcode 9 mit schnellen 4.0 für mich gearbeitet. Die folgende Methode wird in der View Controller-Klasse deklariert, die nur den First View Controller darstellt.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "sendingToTabBar" { 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let tabVC = storyboard.instantiateViewController(withIdentifier: "tabVC") as! UITabBarController 
     self.present(tabVC, animated: true, completion: { 
      let vc = tabVC.selectedViewController as! FirstViewController 
      vc.dataLBL.text = self.dataTF.text! 
     }) 
    } 
} 
Verwandte Themen