iOS页面间传值详解(一)

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

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

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

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

1.delegate传值
  • 步骤一:由于B界面是委托方,所以将协议及方法需要写在B界面中
@protocol ViewControllerBDelegate
- (void)sendValue:(NSString *)value;
@end
  • 步骤二:在B界面中设置代理(为了避免循环引用这里使用weak修饰)
@property (nonatomic,weak) id  delegate;
  • 步骤三:从B界面传值
// B界面返回A界面的点击方法
- (void)buttonClick {
    [self.delegate sendValue:self.textField.text];
    [self.navigationController popViewControllerAnimated:YES];
}
  • 步骤四:由于A界面是代理方,在A界面跳转到B界面的地方,设置界面B的代理为界面A
// 在A界面中点击按钮跳转到B界面,按钮的点击方法
- (void)buttonClick {
    ViewControllerB *VC = [[ViewControllerB alloc] init];
    VC.delegate = self;
    [self.navigationController pushViewController:VC animated:YES];
}
  • 步骤五:在界面A中实现代理方法
// 将B界面传过来的值显示在A界面的label上
- (void)sendValue:(NSString *)value {
    self.label.text = value;
}
2.通知传值

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

  • 步骤一:B界面发送通知
// 在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界面监听并响应通知
//  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"];
}
  • 步骤三:不使用通知时,在A界面移除监听
- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

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

你可能感兴趣的:(iOS页面间传值详解(一))