如何在 Swift 中将变量传递回父级
How to pass a variable back to parent in Swift
我有一个 vc 将数组传递给第二个 vc。第二个 vc 更改数组,并且必须在关闭时将修改后的数组传递给第一个 vc。
把数组从第一个传到第二个,我做到了
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc : MedicacaoPopUp = storyboard.instantiateViewControllerWithIdentifier("MedicacaoPopUp") as! MedicacaoPopUp
vc.nomeAlunoP = nomeAluno.text!
vc.turmaAlunoP = turmaAluno.text!
vc.medicacao = medicacao
vc.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext
self.presentViewController(vc, animated: true, completion: nil)
将修改后的数组传回第一个vc不能
a) 我在第一个 vc 文件中创建了协议,删除并创建了 func 来随机获取数组的值
protocol MedicacaoAddDelegate: class {
func receiveRemedios(rMedicacao: [AnyObject])
}
class MedicacaoAdd: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, MedicacaoAddDelegate {
var medicacao = [AnyObject]()
func receiveRemedios(rMedicacao: [AnyObject]) {
print("dentro do receiveRemedios")
medicacao = rMedicacao
trataCesto()
}
b) 在第二个 vc 中,我创建了变量 "delegate" 并在按下按钮时调用函数
class MedicacaoPopUp: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableview: UITableView!
weak var delegate: MedicacaoAddDelegate?
var nomeAlunoP = ""
var turmaAlunoP = ""
var medicacao = [AnyObject]()
override func viewDidLoad() {
self.tableview.delegate = self
self.tableview.dataSource = self
}
@IBAction func btnDismiss(sender: UIButton) {
self.delegate?.receiveRemedios(medicacao)
self.dismissViewControllerAnimated(true, completion: nil)
}
我真的不知道我做错了什么。我已经尝试了我在 Whosebug 上找到的所有替代方案,但没有任何效果。
您似乎忘记设置所呈现的委托VC。
let vc : MedicacaoPopUp = storyboard.instantiateViewControllerWithIdentifier("MedicacaoPopUp") as! MedicacaoPopUp
添加
vc.delegate = self
确实是一个结构良好的代码。使用协议和委托作为从弹出窗口返回数据的回调是个好主意。
只有一件事...这是哪里
vc.delegate = self
在第一个代码片段中?
我有一个 vc 将数组传递给第二个 vc。第二个 vc 更改数组,并且必须在关闭时将修改后的数组传递给第一个 vc。
把数组从第一个传到第二个,我做到了
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc : MedicacaoPopUp = storyboard.instantiateViewControllerWithIdentifier("MedicacaoPopUp") as! MedicacaoPopUp
vc.nomeAlunoP = nomeAluno.text!
vc.turmaAlunoP = turmaAluno.text!
vc.medicacao = medicacao
vc.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext
self.presentViewController(vc, animated: true, completion: nil)
将修改后的数组传回第一个vc不能
a) 我在第一个 vc 文件中创建了协议,删除并创建了 func 来随机获取数组的值
protocol MedicacaoAddDelegate: class {
func receiveRemedios(rMedicacao: [AnyObject])
}
class MedicacaoAdd: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, MedicacaoAddDelegate {
var medicacao = [AnyObject]()
func receiveRemedios(rMedicacao: [AnyObject]) {
print("dentro do receiveRemedios")
medicacao = rMedicacao
trataCesto()
}
b) 在第二个 vc 中,我创建了变量 "delegate" 并在按下按钮时调用函数
class MedicacaoPopUp: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableview: UITableView!
weak var delegate: MedicacaoAddDelegate?
var nomeAlunoP = ""
var turmaAlunoP = ""
var medicacao = [AnyObject]()
override func viewDidLoad() {
self.tableview.delegate = self
self.tableview.dataSource = self
}
@IBAction func btnDismiss(sender: UIButton) {
self.delegate?.receiveRemedios(medicacao)
self.dismissViewControllerAnimated(true, completion: nil)
}
我真的不知道我做错了什么。我已经尝试了我在 Whosebug 上找到的所有替代方案,但没有任何效果。
您似乎忘记设置所呈现的委托VC。
let vc : MedicacaoPopUp = storyboard.instantiateViewControllerWithIdentifier("MedicacaoPopUp") as! MedicacaoPopUp
添加
vc.delegate = self
确实是一个结构良好的代码。使用协议和委托作为从弹出窗口返回数据的回调是个好主意。
只有一件事...这是哪里
vc.delegate = self
在第一个代码片段中?