以後的幾篇博客, 記錄下不一樣界面間傳值的經常使用辦法。html
這篇文章記錄廣播的方式。ios
iOS的設計模式中,通知模式也是其中重要的模式之一,
Notification直譯爲通知,其實本人以爲叫作廣播模式更爲貼切。
它的做用就是一個對象對多個對象的同步操做。
用法很簡單,一個對象發出一個廣播,須要收聽的聽衆就先註冊一下,而後選定頻道,完了就能夠收聽廣播的內容了。
git
可是要注意一點, 在收聽以前, 必定要先註冊。 否則發送的廣播接受不到, 也就是值改變了, 不會作出響應。github
下面是一個簡單的demo, 效果以下:設計模式
第一個界面, 作爲聽衆, 註冊收聽廣播。函數
第二個界面, 作爲廣播, 發送廣播。post
當第二個界面發出一個廣播後, 第一個界面自動接收。spa
能夠參考git上的源碼:.net
https://github.com/colin1994/NotificationTest.git
設計
具體實現以下:
第一個界面, 註冊成爲聽衆, 並設置收到廣播後的響應事件:
01.
- (
void
)viewDidLoad
02.
{
03.
[
super
viewDidLoad];
04.
// Do any additional setup after loading the view, typically from a nib.
05.
06.
// 咱們喜歡聽ChangeTheme的廣播
07.
// 註冊成爲廣播站ChangeTheme頻道的聽衆
08.
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
09.
10.
// 成爲聽衆一旦有廣播就來調用self recvBcast:函數
11.
[nc addObserver:self selector:
@selector
(recvBcast:) name:@
"ChangeTheme"
object:nil];
12.
}
13.
14.
15.
// 這個函數是系統自動來調用
16.
// ios系統接收到ChangeTheme廣播就會來自動調用
17.
// notify就是廣播的全部內容
18.
- (
void
) recvBcast:(NSNotification *)notify
19.
{
20.
21.
static
int
index;
22.
NSLog(@
"recv bcast %d"
, index++);
23.
24.
// 取得廣播內容
25.
NSDictionary *dict = [notify userInfo];
26.
NSString *name = [dict objectForKey:@
"ThemeName"
];
27.
UIColor *c = [dict objectForKey:@
"ThemeColor"
];
28.
29.
self.title = name;
30.
31.
self.view.backgroundColor = c;
32.
33.
}
第二個界面, 發送廣播
01.
- (IBAction)btnClick:(id)sender
02.
{
03.
// 取得ios系統惟一的全局的廣播站 通知中心
04.
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
05.
06.
//設置廣播內容
07.
NSString *name = @
"設置顏色"
;
08.
UIColor *color_ = [UIColor redColor];
09.
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
10.
name, @
"ThemeName"
,
11.
color_, @
"ThemeColor"
, nil];
12.
13.
//將內容封裝到廣播中 給ios系統發送廣播
14.
// ChangeTheme頻道
15.
[nc postNotificationName:@
"ChangeTheme"
object:self userInfo:dict];
16.
17.
}