Zunächst einmal ändern Sie den Namen Ihres Viewcontroller von Class_1 zu Class1ViewController und Class_2 zu Class2ViewController
Sie müssen die Variable Class2ViewController einzustellen, während es in Class1ViewController Initialisieren, und die Daten zu übergeben zurück aus Class2ViewController zu Class1ViewController benötigen Sie delegieren Transfer
Für die Daten Class1ViewControlle verwenden r zu Class2ViewController, öffnen Sie Ihre Class1ViewController Datei und fügen Sie die folgende prepareForSegue Methode, wenn Sie mit Storyboard
class Class1ViewController: UIViewController{
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "Class2ViewController" {
if let class2ViewController = segue.destinationViewController as? Class2ViewController {
class2ViewController.inforFromClass1 = "Class 2 Variable set from Class 1"
}
}
}
}
jedoch Wenn Sie xib verwenden und eine Taste zum Bewegen zu Class2ViewController von Class1ViewController, der folgende Code sollte in IBAction der Schaltfläche geschrieben werden, die Class2ViewController
auslöst
Dies ist, wie Sie die Variable auf Class2ViewController gesetzt, während es von zeigt Class1ViewController
Jetzt Nachricht von Class2ViewController zu Class1ViewController Sie Delegierten verwenden müssen, zu übergeben. Öffnen Sie Class2ViewController und fügen Sie das folgende Protokoll an der Spitze
@objc protocol Class2ViewContollerDelegate :class{
func printMessageFromClass2ViewController()
}
class Class2ViewController: UIViewController {
}
hinzufügen schwachen Verweis auf die delagate in Class2ViewController Klasse und nennen es in seiner ViewDidAppear oder jede andere Methode, die Sie mögen,
@objc protocol Class2ViewContollerDelegate :class{
func printMessageFromClass2ViewController()
}
class Class2ViewController: UIViewController {
weak var delegate: Class2ViewControllerDelegate?
override func viewDidAppear(animated: Bool) {
self.delegate?.printValueFromClass2ViewController
}
}
Nun, da wir das Protokoll in Class2ViewController definieren, müssen wir es in Class1ViewController implementieren. Zurück in Ihrem Class1ViewController Datei implementieren das Protokoll wie diese
class Class1ViewController: UIViewController, Class2ViewControllerDelegate {
func printMessageFromClass2ViewController(){
print("hey I just printed message in Class1ViewController through its delegate in Class2ViewController")
}
// For Xibs
@IBAction showClass2ViewController(){
let secondViewController = SecondViewController(nibName: "SecondViewController", bundle: NSBundle.mainBundle())
secondViewController.infoFromClass1 = "Class 2 Variable set from Class 1"
self.showViewController(secondViewController, sender: self)
}
// For storyboards
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "Class2ViewController" {
if let class2ViewController = segue.destinationViewController as?Class2ViewController {
class2ViewController.inforFromClass1 = "Class 2 Variable set from Class 1"
}
}
}
}
Versuchen Sie delegieren Protokoll? – iMuzahid
Ich bin ziemlich neu zu schnell, können Sie mir ein Beispiel zeigen? – Alex
Siehe [z.B. diese Antwort für das Übermitteln von Daten zwischen zwei verschiedenen View-Controllern mithilfe von Segmenten] (http://stackoverflow.com/a/35314768/4573247). – dfri