协议传值是从第二页传值到第一页
一、协议传值第一步,创建协议
#warning 协议传值第一步 创建协议
@protocol SecondViewControllerDelegate <NSObject>
// 传值的方法一般都带一个或者多个参数
- (void)passValue:(NSString *)string;
@end
二、协议传值第二步,创建一个代理人属性,用来执行协议方法
@interface SecondViewController : UIViewController
#warning 协议传值第二步 创建一个代理人属性 用来执行协议方法
@property(nonatomic,assign) id<SecondViewControllerDelegate> delegate;
@end
// 为什么用assign
// 循环引用
// 导致内存泄露
三、协议传值第三步,在合适的位置,设定好的代理人(delegate对象)执行协议方法
- (void)buttonClicked:(UIButton *)button
{
#warning 协议传值第三步 在合适的位置 让设定好的代理人(delegate对象)执行协议方法
[self.delegate passValue:self.textField.text];
[self.navigationController popToRootViewControllerAnimated:YES];
}
前三步都在第二页完成。
四,协议传值第四步,签订协议
#warning 协议传值第四步 签订协议
@interface MainViewController ()<SecondViewControllerDelegate>
@end
五、协议传值第五步,设置第二页的代理人
- (void)buttonClicked:(UIButton *)button
{
SecondViewController *secondVC = [[SecondViewController alloc] init];
#warning 协议传值第五步 设置第二个页面的代理人
secondVC.delegate = self;
[self.navigationController pushViewController:secondVC animated:YES];
[secondVC release];
}
六、协议传值第六步,实现相应的协议方法
#warning 协议传值第六步 实现相应的协议方法
- (void)passValue:(NSString *)string
{
// 利用传过来的string参数 给自己的空间赋值
UIButton *button = (UIButton *)[self.view viewWithTag:10000];
self.title = string;
[button setTitle:string forState:UIControlStateNormal];
}