之後的幾篇部落格, 記錄下不同介面間傳值的常用辦法。
這篇文章記錄廣播的方式。
iOS的設計模式中,通知模式也是其中重要的模式之一,
Notification直譯為通知,其實本人覺得叫做廣播模式更為貼切。
它的作用就是一個對象對多個對象的同步操作。
用法很簡單,一個對象發出一個廣播,需要收聽的聽眾就先註冊一下,然後選定頻道,完了就可以收聽廣播的內容了。
但是要注意一點, 在收聽之前, 一定要先註冊。 不然發送的廣播接受不到, 也就是值改變了, 不會做出響應。
下面是一個簡單的demo, 效果如下:
第一個介面, 做為聽眾, 註冊收聽廣播。
第二個介面, 做為廣播, 發送廣播。
當第二個介面發出一個廣播後, 第一個介面自動接收。
可以參考git上的源碼:
https://github.com/colin1994/NotificationTest.git
具體實現如下:
第一個介面, 註冊成為聽眾, 並設定收到廣播後的響應事件:
- (void)viewDidLoad{ [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib. // 我們喜歡聽ChangeTheme的廣播 // 註冊成為廣播站ChangeTheme頻道的聽眾 NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; // 成為聽眾一旦有廣播就來調用self recvBcast:函數 [nc addObserver:self selector:@selector(recvBcast:) name:@"ChangeTheme" object:nil];}// 這個函數是系統自動來調用// ios系統接收到ChangeTheme廣播就會來自動調用// notify就是廣播的所有內容- (void) recvBcast:(NSNotification *)notify{ static int index; NSLog(@"recv bcast %d", index++); // 取得廣播內容 NSDictionary *dict = [notify userInfo]; NSString *name = [dict objectForKey:@"ThemeName"]; UIColor *c = [dict objectForKey:@"ThemeColor"]; self.title = name; self.view.backgroundColor = c; }
第二個介面, 發送廣播
- (IBAction)btnClick:(id)sender{ // 取得ios系統唯一的全域的廣播站 通知中樞 NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; //設定廣播內容 NSString *name = @"設定顏色"; UIColor *color_ = [UIColor redColor]; NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: name, @"ThemeName", color_, @"ThemeColor", nil]; //將內容封裝到廣播中 給ios系統發送廣播 // ChangeTheme頻道 [nc postNotificationName:@"ChangeTheme" object:self userInfo:dict]; }