(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]; } }
- (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self name:@back object:nil]; }