Ios 在dismissViewController期间无法为文本字段赋值
我有两个视图控制器-A和B。 ViewController A有一个文本字段。单击ViewController A的textfield,会出现具有另一个textfield的View Controller B。单击ViewController B键盘上的“完成”,调用dissmissViewController,文本字段的数据应从ViewController B移动到A 我无法将数据从B传递到A。我正在调用A的ViewdidLoad(),然后再调用ViewController。在A的viewdidLoad()中,我有一个textfieldA.text=textfieldB。它在投掷- 致命错误:在展开可选值时意外发现nil“ 委托模式: 视图控制器2:Ios 在dismissViewController期间无法为文本字段赋值,ios,swift,uiviewcontroller,Ios,Swift,Uiviewcontroller,我有两个视图控制器-A和B。 ViewController A有一个文本字段。单击ViewController A的textfield,会出现具有另一个textfield的View Controller B。单击ViewController B键盘上的“完成”,调用dissmissViewController,文本字段的数据应从ViewController B移动到A 我无法将数据从B传递到A。我正在调用A的ViewdidLoad(),然后再调用ViewController。在A的viewdid
//Define Protocol
@protocol VC2Delegate {
doneClicked(val:String)
}
Class:VC2 {
//Create Delegate variable
var delegate:VC2Delegate?
//method of done clicked
func btnDoneClicked(sender:UIButton) {
//call delegate method
delegate.doneClicked(vc2TextField.text)
//dismiss view controller
self.dismissViewController......
}
}
//Conform Protocol
Class:VC1, VC2Delegate {
//implement delegate method
func doneClicked(val:String) {
//assign value to textfield
vc1TextField.text = val
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "MySegueFromVC1ToVC2" {
if let destVC = segue.destinationViewController as? VC2 {
//assign delegate to VC1
VC2.delegate = self
}
}
}
}
视图控制器1:
//Define Protocol
@protocol VC2Delegate {
doneClicked(val:String)
}
Class:VC2 {
//Create Delegate variable
var delegate:VC2Delegate?
//method of done clicked
func btnDoneClicked(sender:UIButton) {
//call delegate method
delegate.doneClicked(vc2TextField.text)
//dismiss view controller
self.dismissViewController......
}
}
//Conform Protocol
Class:VC1, VC2Delegate {
//implement delegate method
func doneClicked(val:String) {
//assign value to textfield
vc1TextField.text = val
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "MySegueFromVC1ToVC2" {
if let destVC = segue.destinationViewController as? VC2 {
//assign delegate to VC1
VC2.delegate = self
}
}
}
}
我建议不要显式调用viewDidLoad方法。发布完整的代码会更容易提供帮助。永远不要直接调用
viewDidLoad
。如果使用segues,则可以使用unwind segue将数据传递回,但听起来好像不是,因此委派模式可能更合适