iOS页面间传值详解(一)

2018-03-29  本文已影响0人  cherry1024

一、A页面传值给B界面:

采用的传值方式:属性传值,在A页面跳转B界面的地方直接给B界面的属性赋值即可。

二、A页面跳转到B界面,由B界面向A界面传值

采用的传值方式:delegate传值和通知传值

1.delegate传值
@protocol ViewControllerBDelegate
- (void)sendValue:(NSString *)value;
@end
@property (nonatomic,weak) id <ViewControllerBDelegate> delegate;
// B界面返回A界面的点击方法
- (void)buttonClick {
    [self.delegate sendValue:self.textField.text];
    [self.navigationController popViewControllerAnimated:YES];
}
// 在A界面中点击按钮跳转到B界面,按钮的点击方法
- (void)buttonClick {
    ViewControllerB *VC = [[ViewControllerB alloc] init];
    VC.delegate = self;
    [self.navigationController pushViewController:VC animated:YES];
}
// 将B界面传过来的值显示在A界面的label上
- (void)sendValue:(NSString *)value {
    self.label.text = value;
}
2.通知传值

由B界面向A界面传值,所以是B界面发送通知,A界面监听并接收通知

// 在B界面返回A界面的点击事件中,发送了一个名称为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界面监听名称为“test”的通知
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center addObserver:self selector:@selector(receiveNotification:) name:@"test" object:nil];

//  响应通知的方法,将传入的值显示在A界面的label上
- (void)receiveNotification:(NSNotification *)noti {
    self.label.text = [noti.userInfo objectForKey:@"text"];
}
- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

反向传值中还可以使用block和KVO等方式,后续更新~

上一篇下一篇

猜你喜欢

热点阅读