Ich habe 2 Viewcontrollers wie folgt aus:Wie Rückruf verwenden, um Daten zu
ich will, wenn ich Taste in Viewcontroller drücken wird ViewController2 präsentieren. Wenn ich dann den Text in TextField eingib und die Taste Zurück in ViewController2 drücke, wird dieser Text in ViewController1 an die Schaltfläche gesendet.
Ich kann dies mit Delegaten lösen oder Verweis auf die Klasse ViewController in ViewController2. (Sie können mit meinem Kommentar-Code sehen)
Aber jetzt möchte ich CallBack verwenden, um Daten zurückzusenden.
Wie dies zu tun:
Hier ist Viewcontroller:
import UIKit
class ViewController: UIViewController {
@IBOutlet var button: UIButton!
var myString = ""
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(animated: Bool) {
button.setTitle(myString, forState: .Normal)
}
@IBAction func goToViewController2(sender: AnyObject) {
let vc2 = storyboard?.instantiateViewControllerWithIdentifier("ViewController2") as! ViewController2
// vc2.vc1 = self
presentViewController(vc2, animated: true, completion: nil)
}
}
Und ViewController2:
import UIKit
class ViewController2: UIViewController, UITextFieldDelegate {
@IBOutlet var textField: UITextField!
// var vc1: ViewController?
var callback: ((String) -> Void)?
override func viewDidLoad() {
super.viewDidLoad()
textField.delegate = self
}
func textFieldDidEndEditing(textField: UITextField) {
callback!(textField.text!)
}
@IBAction func backToViewController(sender: AnyObject) {
// vc1?.myString = textField.text!
dismissViewControllerAnimated(true, completion: nil)
}
}
Und ich will nicht mit Abschluss-Block verwenden Funktion entlassen, ich möchte nur meine eigene Rückrufmethode verwenden.
Nizza, vc2.callback = ({string in self.myString = string }) Danke. – Khuong