ios NSNotificationCenter通知的簡(jiǎn)單使用
通知類本身比較簡(jiǎn)單,大概就分為注冊(cè)通知監(jiān)聽器、發(fā)送通知,注銷通知監(jiān)聽器三個(gè)方法;通知中心(NSNotificationCenter)采用單例的模式,整個(gè)系統(tǒng)只有一個(gè)通知中心,通過如下代碼獲取:
//獲取通知中心 [NSNotificationCenter defaultCenter];
注冊(cè)通知監(jiān)聽器方法:
//observer為監(jiān)聽器 //aSelector為接到收通知后的處理函數(shù) //aName為監(jiān)聽的通知的名稱 //object為接收通知的對(duì)象,需要與postNotification的object匹配,否則接收不到通知 - (void)addObserver:(id)observer selector:(SEL)aSelector name:(nullable NSNotificationName)aName object:(nullable id)anObject;
發(fā)送通知的方法:
//需要手動(dòng)構(gòu)造一個(gè)NSNotification對(duì)象 - (void)postNotification:(NSNotification *)notification; //aName為注冊(cè)的通知名稱 //anObject為接受通知的對(duì)象,通知不傳參時(shí)可使用該方法 - (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject; //aUserInfo為將要傳遞的參數(shù),類型為字典類型 //通知需要傳參數(shù)時(shí)使用下面這個(gè)方法,其他同上。 - (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject userInfo:(nullable NSDictionary *)aUserInfo;
注銷通知監(jiān)聽器方法:
//刪除通知的監(jiān)聽器 - (void)removeObserver:(id)observer; //刪除通知的監(jiān)聽器,aName監(jiān)聽的通知的名稱,anObject監(jiān)聽的通知的發(fā)送對(duì)象 - (void)removeObserver:(id)observer name:(nullable NSNotificationName)aName object:(nullable id)anObject; //以block的方式注冊(cè)通知監(jiān)聽器 - (id <NSObject>)addObserverForName:(nullable NSNotificationName)name object:(nullable id)obj queue:(nullable NSOperationQueue *)queue usingBlock:(void (^)(NSNotification *note))block API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));
使用情況:
NSNotificationCenter類一般用于一個(gè)對(duì)象傳遞事件給另外一個(gè)對(duì)象,在另一個(gè)對(duì)象中觸發(fā)某些方法,可以實(shí)現(xiàn)跨視圖的交互。我在最近一個(gè)月內(nèi)用到了兩次NSNotificationCenter類。
①在對(duì)項(xiàng)目進(jìn)行國(guó)際化時(shí),在切換語(yǔ)言時(shí)采用通知的方式,使其他界面進(jìn)行刷新(需要在主線程內(nèi))。
②使用SGPagingView時(shí),需要實(shí)現(xiàn)pageContentView中的內(nèi)容在多選狀態(tài)時(shí),pageTitleView禁止進(jìn)行切換的功能??戳薙GPagingView提供的方法是沒有這個(gè)的,所以就采用了NSNotificationCenter。在進(jìn)入多選狀態(tài)時(shí)發(fā)一條通知,在退出多選狀態(tài)時(shí)發(fā)一條通知(方法比較簡(jiǎn)陋,如果有更好的方法請(qǐng)不吝賜教)。
//注冊(cè)通知監(jiān)聽器
[NotifyUtil addNotify:NOTIFY_DISABLE_SWITCH Observer:self selector:@selector(disableSwitch) Object:nil];
[NotifyUtil addNotify:NOTIFY_ALLOW_SWITCH Observer:self selector:@selector(allowSwitch) Object:nil];
//調(diào)用方法
//禁止pageTitleView進(jìn)行切換
-(void)disableSwitch{
self.pageTitleView.userInteractionEnabled = NO;
}
//允許pageTitleView進(jìn)行切換
-(void)allowSwitch{
self.pageTitleView.userInteractionEnabled = YES;
}
//注銷通知監(jiān)聽器
- (void) dealloc{
[NotifyUtil removeNotify:NOTIFY_DISABLE_SWITCH Observer:self];
[NotifyUtil removeNotify:NOTIFY_ALLOW_SWITCH Observer:self];
}
注:用NotifyUtil對(duì)NSNotificationCenter類進(jìn)行了一個(gè)簡(jiǎn)單的封裝,參數(shù)基本都一致,就不貼NotifyUtil的代碼了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
iOS學(xué)習(xí)筆記(十六)——詳解數(shù)據(jù)庫(kù)操作(使用FMDB)
這篇文章主要介紹了iOS學(xué)習(xí)筆記(十六)——詳解數(shù)據(jù)庫(kù)操作(使用FMDB),具有一定的參考價(jià)值,有興趣的可以了解一下。2016-12-12
iOS 利用動(dòng)畫和貝塞爾實(shí)現(xiàn)咻咻效果
這篇文章主要介紹了iOS 利用動(dòng)畫和貝塞爾實(shí)現(xiàn)咻咻效果的相關(guān)資料,需要的朋友可以參考下2016-09-09
IOS開發(fā)OC代碼中創(chuàng)建Swift編寫的視圖控制器
這篇文章主要介紹了IOS開發(fā)OC代碼中創(chuàng)建Swift編寫的視圖控制器的相關(guān)資料,需要的朋友可以參考下2017-06-06
iOS如何優(yōu)雅地實(shí)現(xiàn)序列動(dòng)畫詳解
這篇文章主要給大家介紹了關(guān)于iOS如何優(yōu)雅地實(shí)現(xiàn)序列動(dòng)畫的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12
iOS 解決UICollectionView 計(jì)算 Cell 大小的問題
本文主要介紹iOS UICollectionView,這里給大家一個(gè)實(shí)例代碼作為參考,并指出經(jīng)常遇到的問題和解決辦法,希望能幫助有需要的小伙伴2016-07-07
iOS中實(shí)現(xiàn)檢測(cè)Zoombie對(duì)象的具體方法
這篇文章主要給大家介紹了關(guān)于iOS中實(shí)現(xiàn)檢測(cè)Zoombie對(duì)象的具體方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
iOS中使用UISearchBar控件限制輸入字?jǐn)?shù)的實(shí)現(xiàn)方法
這篇文章主要介紹了iOS中使用UISearchBar控件限制輸入字?jǐn)?shù)的實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2016-08-08
iOS實(shí)現(xiàn)點(diǎn)擊圖片放大和長(zhǎng)按保存圖片的示例
本篇文章主要介紹了iOS實(shí)現(xiàn)點(diǎn)擊圖片放大和長(zhǎng)按保存圖片的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03

