在相互传值的时候,我个人比较喜欢使用delegate,因为刚开始学习的时候对delegate掌握的不是很熟练,所以一直使用,养成了习惯,只要是反向传值就使用delegate,无论多少层,完全忽略了通知的这个机制。今天就总结一下通知的使用。
欢迎加入我个人维护QQ群:379069176
PS:定期分享干货
原理图:
如果有类似的情况我们就应该使用通知来去实现。
首先,我们要在接收消息的地方添加通知:
举例:
view3中有一个button,当button点击之后,view1和view2都需要点击事件的通知。
第一步:
在view1和view2中添加通知:【一般情况都是在init方法中添加】
NSNotificationCenter.defaultCenter().addObserver(self, selector: "didKeyClickAction:", name: "keyBoardClick", object: nil)
第二步:
在当前的view中创建方法:func didKeyClickAction(sender: NSNotification)
第三步:
销毁这个监听,销毁监听的方法有很多,根据个人喜好和情况而定。
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self, name: "keyBoardClick", object: nil)
}
以上3步完成之后,监听的部分就写完了,这里要注意的是,在添加通知的时候,name
参数一定要和发送时候的name
相互对应。
接下来,就来到view3中的button点击事件部分:
@IBAction func selectedKey(sender: UIButton) {
guard let keyValue = sender.titleLabel?.text else {
LOG("selected keyValue is null")
return
}
let n = NSNotification(name: "keyBoardClick", object: keyValue)
NSNotificationCenter.defaultCenter().postNotification(n)
}
在这里创建发送信息,并传给通知中心。其中name
就是之前写到的要对应的部分。object
是要发送的内容。从而,button点击之后,view1和view2都可以得到keyValue的值。