(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];
}