2016-04-09 1 views
0

Ich erhalte Daten von Firebase. Verwenden Sie dann (prepareForSegue), um den Wert für die nächste UIView festzulegen.Wie teile ich Daten in verschiedenen Klassen

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "ToContent" { 
     if let indexPath = self.tableView.indexPathForSelectedRow { 
      firstTB = segue.destinationViewController as! FirstTabBar 
      firstTB.clickedRow = indexPath.row 
     } 
    } 
} 

FirstTabBar ist ein TabBarController, der 3 UIView enthält. Wie können diese 3 UIView-Klassen diesen Wert aus der FirstTabBar-Klasse erhalten?

+0

Verwenden Sie sharedInstance http://stackoverflow.com/questions/36494722/ios-sharing-data-between-viewcontrollers –

Antwort

0

Sie können Delegierung verwenden. Ich werde mit einem etwas einfacheren Beispiel mit zwei Tab-Bars erklären, aber Sie können es nach Ihren Bedürfnissen verwandeln.

Zuerst müssen wir ein Protokoll und eine Funktion erstellen, die wir in unserem gewünschten View-Controller ausführen möchten.

protocol DataDelegate: class { 

    func didReceiveData(data: String) 
} 

Lassen Sie uns sagen, dass wir FirstViewController haben, die für die erste tabBar und SecondViewController für die zweite tabBar. In der SecondViewController müssen wir eine schwache Variable für unseren Delegaten deklarieren.

// In SecondViewController 
weak var dataDelegate: DataDelegate? 

Im FirstViewController wir zum UITabBarControllerDelegate entsprechen müssen (nicht vergessen, den Delegierten selbst in viewDidLoadself.tabBarController?.delegate = self eingestellt) und verwenden Sie die delegierte Methode tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController)

// MARK: - TabBarControllerDelegate 

extension FirstViewController: UITabBarControllerDelegate { 

    func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) { 
     if let secondViewController = viewController as? SecondViewController { 
      secondViewController.dataDelegate = self 
     } 
    } 
} 

Wie wir sehen können viewController ist der ViewController, den wir angeklickt haben (in unserem Fall SecondViewController). Wir müssen es in SecondViewController umsetzen, damit wir Zugriff auf seine Eigenschaften haben und dataDelegate auf self setzen können.

Jetzt sind wir verpflichtet, dem DataDelegate Protokoll zu entsprechen. Wir haben nur eine Funktion, die wir implementieren müssen - didReceiveData().

// MARK: - DataDelegateProtocol 

extension FirstViewController: DataDelegate { 

    func didReceiveData(data: String) { 
     print(data) 
    } 
} 

schließlich in unserem SecondViewController müssen wir sagen, wo wir die Funktion ausgeführt werden soll. Ich werde es tun viewDidAppear aber Sie können, wo immer Sie brauchen.

// In SecondViewController 
override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 

    self.dataDelegate?.didReceiveData("data") 
} 

Dieser Kerl erklärt Delegation gut link. Ich hoffe du hast es verstanden.

2

Einfach!

Übergeben Sie einfach die Daten über das Segment; nehmen gibt es zwei Controller, firstController und secondController, und die Daten theDataToPass, die eine Klasse von CoolData ist

In der Steuerung Sie kommen aus

override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) { 
    let second = segue.destinationController as! SecondController 
    second.representedObject = self.theDataToPass 
} 

und in der Steuerung Sie gehen zu

override func viewWillAppear() { 
    self.thePassedData = self.representedObject as! CoolData 
}