一 :通知
1.通知传值所用方法
// MARK: - private methods(内部接口)
let NotifMycation = NSNotification.Name(rawValue:"MyNSNotification")
func tempbuttonAction() {
//这个方法可以传一个值
NotificationCenter.default.post(name: NotifMycation, object: "填写所要传的值")
//这个方法可传一个字典
// NotificationCenter.default.post(name: NotifMycation, object: nil, userInfo: ["" : ""])
self.dismiss(animated: true, completion: nil)
}
//接受通知
let NotifMycation = NSNotification.Name(rawValue:"MyNSNotification")
NotificationCenter.default.addObserver(self, selector: #selector(upDataChange(notif:)), name: NotifMycation, object: nil)
//(2)移除通知的方法
deinit {
//移除通知
NotificationCenter.default.removeObserver(self)
}
//(3)接收传过来的值
func upDataChange(notif: NSNotification) {
guard let text: String = notif.object as! String? else { return }
self.text.text = text
}
二:代理
1.设置代理
//(1)定义代理方法
protocol MyDelegate {
func didDelegateText(text: String)
}
//(2)声明代理
var delegate: MyDelegate?
//(3)向前传值button的响应方法---代理传值的方法就写在buton的点击事件中
func tempbuttonAction() { //此处为button的点击事件
delegate?.didDelegateText(text: self.textField.text!) //此处为代理传值的方法
self.dismiss(animated: true, completion: nil)
}
2.前一个界面接受代理//(1)首先遵循代理 --->MyDelegate
//(2)
let vc = DelegateViewController()
vc.delegate = self
//接收代理传过来的值
//代理接受传过来的值
func didDelegateText(text: String) {
self.text.text = text
}
三: 闭包传值
//(1)设置闭包
typealias textBlock = (String) -> ()
var block: textBlock?
func getBlock(block: textBlock?) {
self.block = block
}
//(2)传值所用方法书写 ----即点击事件向前返回时的点击方法中
func tempbuttonAction() {
if let block = self.block {
block(self.textField.text!) //此处填写所要传的值
}
self.dismiss(animated: true, completion: nil)
}
//(3)前一个界面接收闭包所传过来的值
let vc = BlockViewController()
vc.getBlock{ (value) in
self.text.text = value
}