之後的幾篇博客, 記錄下不同界面間傳值的常用辦法。
這篇文章記錄廣播的方式。
iOS的設計模式中,通知模式也是其中重要的模式之一,
Notification直譯為通知,其實本人覺得叫做廣播模式更為貼切。
它的作用就是一個對象對多個對象的同步操作。
用法很簡單,一個對象發出一個廣播,需要收聽的聽眾就先注冊一下,然後選定頻道,完了就可以收聽廣播的內容了。
但是要注意一點, 在收聽之前, 一定要先注冊。 不然發送的廣播接受不到, 也就是值改變了, 不會做出響應。
下面是一個簡單的demo, 效果如下:
第一個界面, 做為聽眾, 注冊收聽廣播。
第二個界面, 做為廣播, 發送廣播。
當第二個界面發出一個廣播後, 第一個界面自動接收。
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD48cD6/ydLUss6/vGdpdMnPtcTUtMLrOjwvcD48cD5odHRwczovL2dpdGh1Yi5jb20vY29saW4xOTk0L05vdGlmaWNhdGlvblRlc3QuZ2l0PGJyIC8+PC9wPjxwPr7fzOXKtc/WyOfPwjo8L3A+PHA+tdrSu7j2vefD5iwg16Ky4bPJzqrM/dbaLCCyosno1sPK1bW9ueOypbrztcTP7NOmysK8/jo8L3A+PHA+PHByZSBjbGFzcz0="brush:java;">- (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]; }