程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 淺談通知NSNoticfication----通知實例操作

淺談通知NSNoticfication----通知實例操作

編輯:C++入門知識

淺談通知NSNoticfication----通知實例操作


(1)通知是什麼?

之前寫過一篇文章,也是關於通知的,但是偏理論化.

 

今天來一篇偏重實際應用的通知實例.相信這樣兩篇文章後,能夠給讓我們對於通知有較為深刻的理解了.

 

(2)通知能夠解決什麼問題?

通俗的講,通知是一種廣播模式,當有多個頁面對某一個頁面的某個控件(或者特性)關注時候,我們可以采用通知模式.這樣,當我們關注頁面的特性發生變化後,其他頁面就檢測到這個變化,然後哥哥頁面會采取相應的響應措施.

 

(3)通知實現實例?

我做了一個小的demo,demo中含有三個頁面,我想要實現的是當第二個頁面的UITextField開始編輯的時候,我的第一頁和第三頁設置更改背景色.

首先第二頁發送通知,這個發送通知的時間點很重要,我們需要檢測的時UITextField是否開始編輯,那麼就需要寫在代理方法裡面

 

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    NSLog(@開始編輯了);
    [[NSNotificationCenter defaultCenter] postNotificationName:@changeColor object:self];
}

然後我們在第一頁注冊監聽者,以及監聽後的實現方法.

 

 

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    //初始化通知中心
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center addObserver:self selector:@selector(changeColor) name:@changeColor object:nil];

}

當監聽到通知後,會有相應響應

 

 

- (void)changeColor
{
    self.view.backgroundColor = [UIColor redColor];
}

同樣,我們在第三頁注冊監聽者以及設定監聽方法(這裡不再贅述).

 

到此為止,我們的通知設定完畢,當我們開始編輯UITextField框的時候,就會觸發發送消息的方法,廣播消息,當第一頁和第三頁收到消息,就會采取相應行動(changeColor).

 

(4)通知的傳值應用

通知不僅可以用來廣播消息,同時在廣播的時候可以傳值,給所有他得粉絲(監聽者)傳值具體方法如下

 

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    NSLog(@開始編輯了);
    //[[NSNotificationCenter defaultCenter] postNotificationName:@changeColor object:self];
    [[NSNotificationCenter defaultCenter]postNotificationName:@changeColor object:self userInfo:[NSDictionary dictionaryWithObject:@red forKey:@color]];
    
}

這裡就是將一個字典信息發送出去.自然粉絲的接收也需要從字典裡面取值

 

 

- (void)changeColor:(NSNotification*)notification
{
    NSDictionary *dic = [notification userInfo];
    NSString *str = [dic valueForKey:@color];
    if ([str isEqualToString:@red]) {
        self.view.backgroundColor = [UIColor redColor];
    }
    
}

(5)最後有一點需要強調的是,無論有多少個監聽者,每個注冊為監聽者的對象最後都得釋放,不然就會像我之前文章中描述的那樣,可能出現野指針的崩潰.

 

 

 

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@back object:nil];
   
}


 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved