一涯鲁、A頁(yè)面?zhèn)髦到oB界面:
采用的傳值方式:屬性傳值坤学,在A頁(yè)面跳轉(zhuǎn)B界面的地方直接給B界面的屬性賦值即可皱坛。
二尊勿、A頁(yè)面跳轉(zhuǎn)到B界面,由B界面向A界面?zhèn)髦?/h4>
采用的傳值方式:delegate傳值和通知傳值
1.delegate傳值
- 步驟一:由于B界面是委托方畜侦,所以將協(xié)議及方法需要寫(xiě)在B界面中
@protocol ViewControllerBDelegate
- (void)sendValue:(NSString *)value;
@end
- 步驟二:在B界面中設(shè)置代理(為了避免循環(huán)引用這里使用weak修飾)
@property (nonatomic,weak) id <ViewControllerBDelegate> delegate;
- 步驟三:從B界面?zhèn)髦?/li>
// B界面返回A界面的點(diǎn)擊方法
- (void)buttonClick {
[self.delegate sendValue:self.textField.text];
[self.navigationController popViewControllerAnimated:YES];
}
- 步驟四:由于A界面是代理方元扔,在A界面跳轉(zhuǎn)到B界面的地方,設(shè)置界面B的代理為界面A
// 在A界面中點(diǎn)擊按鈕跳轉(zhuǎn)到B界面旋膳,按鈕的點(diǎn)擊方法
- (void)buttonClick {
ViewControllerB *VC = [[ViewControllerB alloc] init];
VC.delegate = self;
[self.navigationController pushViewController:VC animated:YES];
}
- 步驟五:在界面A中實(shí)現(xiàn)代理方法
// 將B界面?zhèn)鬟^(guò)來(lái)的值顯示在A界面的label上
- (void)sendValue:(NSString *)value {
self.label.text = value;
}
2.通知傳值
由B界面向A界面?zhèn)髦蹬煊铮允荁界面發(fā)送通知,A界面監(jiān)聽(tīng)并接收通知
- 步驟一:B界面發(fā)送通知
// 在B界面返回A界面的點(diǎn)擊事件中验懊,發(fā)送了一個(gè)名稱(chēng)為test的通知擅羞,將B界面中textfield上輸入的值傳入
- (void)buttonClick {
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center postNotificationName:@"test" object:nil userInfo:[NSDictionary dictionaryWithObject:self.textField.text forKey:@"text"]];
[self.navigationController popViewControllerAnimated:YES];
}
- 步驟二:A界面監(jiān)聽(tīng)并響應(yīng)通知
// A界面監(jiān)聽(tīng)名稱(chēng)為“test”的通知
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(receiveNotification:) name:@"test" object:nil];
// 響應(yīng)通知的方法,將傳入的值顯示在A界面的label上
- (void)receiveNotification:(NSNotification *)noti {
self.label.text = [noti.userInfo objectForKey:@"text"];
}
- 步驟三:不使用通知時(shí)义图,在A界面移除監(jiān)聽(tīng)
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
反向傳值中還可以使用block和KVO等方式减俏,后續(xù)更新~