在相互傳值的時(shí)候,我個(gè)人比較喜歡使用delegate,因?yàn)閯傞_(kāi)始學(xué)習(xí)的時(shí)候?qū)elegate掌握的不是很熟練橄碾,所以一直使用,養(yǎng)成了習(xí)慣,只要是反向傳值就使用delegate法牲,無(wú)論多少層史汗,完全忽略了通知的這個(gè)機(jī)制。今天就總結(jié)一下通知的使用拒垃。
歡迎加入我個(gè)人維護(hù)QQ群:379069176
PS:定期分享干貨
原理圖:
如果有類(lèi)似的情況我們就應(yīng)該使用通知來(lái)去實(shí)現(xiàn)停撞。
首先,我們要在接收消息的地方添加通知:
舉例:
view3中有一個(gè)button悼瓮,當(dāng)button點(diǎn)擊之后戈毒,view1和view2都需要點(diǎn)擊事件的通知。
第一步:
在view1和view2中添加通知:【一般情況都是在init方法中添加】
NSNotificationCenter.defaultCenter().addObserver(self, selector: "didKeyClickAction:", name: "keyBoardClick", object: nil)
第二步:
在當(dāng)前的view中創(chuàng)建方法:func didKeyClickAction(sender: NSNotification)
第三步:
銷(xiāo)毀這個(gè)監(jiān)聽(tīng)横堡,銷(xiāo)毀監(jiān)聽(tīng)的方法有很多副硅,根據(jù)個(gè)人喜好和情況而定。
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self, name: "keyBoardClick", object: nil)
}
以上3步完成之后翅萤,監(jiān)聽(tīng)的部分就寫(xiě)完了恐疲,這里要注意的是,在添加通知的時(shí)候套么,name
參數(shù)一定要和發(fā)送時(shí)候的name
相互對(duì)應(yīng)培己。
接下來(lái),就來(lái)到view3中的button點(diǎn)擊事件部分:
@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)
}
在這里創(chuàng)建發(fā)送信息胚泌,并傳給通知中心省咨。其中name
就是之前寫(xiě)到的要對(duì)應(yīng)的部分。object
是要發(fā)送的內(nèi)容玷室。從而零蓉,button點(diǎn)擊之后,view1和view2都可以得到keyValue的值穷缤。