Block传值
后->前
例如有2个界面:FirstViewController 和 SecondViewController
界面元素:
FirstViewController: 一个Label 和 Button
SecondViewController: 一个TextField 和 Button在SecondViewController.h中
重定义block
typedef void (^SecondBlock) (NSString *);
- 声明一个block 属性值
@property (nonatomic , copy) SecondBlock tzf;
- 在SecondViewController.m中
- 点击按钮实现的方法:
- (void)back {
if (self.tf != nil) {
self.tzf(self.tf.text);
}
[self.navigationController popViewControllerAnimated:YES];
}
- FirstViewController.m 按钮方法中
- (void)next {
SecondViewController *secondVC = [[SecondViewController alloc] init];
secondVC.tzf = ^(NSString *str){
self.label.text = str;
};
[self.navigationController pushViewController:secondVC animated:YES];
}
代理传值
后- > 前
例如有2个界面:ThirdViewController 和 FourthViewController
界面元素:
ThirdViewController: 一个Label 和 Button
FourthViewController: 一个TextField 和 Button
步骤:<前3步 都是在后面的控制器中, 后面3步在第一个控制器>
- 声明协议 <协议方法等>
- 声明�代理属性
- 代理对象执行协议方法
- 指定代理对象
- 接收协议
- 实现协议方法
在第二个控制器FourthViewController.h中
- 声明协议 <协议方法等>
- 声明�代理属性
//1、 声明协议 <协议方法等>
@protocol FourthViewControllerDelegate <NSObject>
- (void)sendString:(NSString *)string;
@end
@interface FourthViewController : UIViewController
//2、声明代理属性
@property (nonatomic, assign) id<FourthViewControllerDelegate> delegate;
@end
在第二个控制器FourthViewController.m 返回按钮的方法中
- (void)back {
//3、代理对象执行协议方法
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(sendString:)]) {
[self.delegate sendString:self.textField.text];
}
[self.navigationController popViewControllerAnimated:YES];
}
在第 一个控制器ThirdViewController.m 按钮的方法中
- (void)push {
FourthViewController *fourthVC = [[FourthViewController alloc] init];
//4、指定代理对象
fourthVC.delegate = self;
[self.navigationController pushViewController:fourthVC animated:YES];
}
//5、接收协议
@interface ThirdViewController ()<FourthViewControllerDelegate>
@property (nonatomic, retain) UILabel *label;
@end
//6、实现协议方法
//为标签赋值文本的方法
- (void)sendString:(NSString *)string {
self.label.text = string;
}