闭包
1.第二控制器申明一个闭包类型
typealias BackBlock = (String) -> Void
2.第二控制器定义一个变量
var BackBlockClousure : BackBlock?
3.第一控制器实现回调
let VC = segue.destination as! DetailsViewController
VC.BackBlockClousure = {
(backStr:String) -> Void in
print(backStr)
}
4.第二控制器传值
self.BackBlockClousure!("闭包反向传值")
通知
第一个页面
//接受通知
let NotifMycation = NSNotification.Name(rawValue:"MyNSNotification")
NotificationCenter.default.addObserver(self, selector: #selector(upDataChange(notif:)), name: NotifMycation, object: nil)
deinit {
//移除通知
NotificationCenter.default.removeObserver(self)
}
//接收到后执行的方法
func upDataChange(notif: NSNotification) {
guard let text: String = notif.object as! String? else { return }
self.text.text = text
}
第二个页面
//发送通知
let NotifMycation = NSNotification.Name(rawValue:"MyNSNotification")
func tempbuttonAction() {
//这个方法可以传一个值
NotificationCenter.default.post(name: NotifMycation, object: self.textField.text)
//这个方法可传一个字典
// NotificationCenter.default.post(name: NotifMycation, object: nil, userInfo: ["" : ""])
self.dismiss(animated: true, completion: nil)
}
delegate
B页面
protocol passByValueDelegate {
func didDeleteText(text:String)
}
var delegate : passByValueDelegate?
//按钮点击事件
@objc func btn1Action(){
delegate?.didDeleteText(text: "delegate传值")
self.navigationController?.popViewController(animated: true)
}
A页面
遵循passByValueDelegate代理
let detail = BlockNotiDelegateDetailVC()
detail.delegate = self
self.navigationController?.pushViewController(detail, animated: true)
/*passByValueDelegate*/
func didDeleteText(text: String) {
print("delegate===",text)
}