// 属性传值:最常用的一种传值方式
/**
* 操作过程
* 1、在第二个控制器的.h文件里面书写属性
* 2、就在第一个页面创建第二个页面控制器方法里面,进行赋值操作
* 3、适用性(局限性):仅仅适用于从第一个页面传到第二个页面(从前往后传)
*/
*1、在第二个控制器的.h文件里面书写属性
// 设置属性用于传值
@property (nonatomic, copy)NSString *receiveStr;
*2、就在第一个页面创建第二个页面控制器方法里面,进行赋值操作
// 赋值, 属性写在了第二个控制器里面
// 在 SecondViewController.m 里面接收,因为切换的是控制器
secondVC.receiveStr = self.rootView.firstText.text;
// 接收字符串
self.rootView.label.text = self.receiveStr;
// 代理传值:
/**
* 操作过程
* 1、在第二级控制器的.h文件,书写非正式协议(方法必须带参数)
* 2、在第二级控制器的.h文件,写属性
* 3、在第二级控制器的.m文件,利用代理属性,去调用协议里面的方法(同时把参数传出去)
*
* 4、在第一级控制器里面遵守协议
* 5、在第一级控制器里面设置代理
* 6、在第一级控制器里面实现代理方法
*/
1、在第二级控制器的.h文件,书写非正式协议(方法必须带参数)
// 1.设置协议
@protocol SecondViewControllerDelegate <NSObject>
- (void)translateValueFromSecondToFirst:(NSString *)string;
@end
2、在第二级控制器的.h文件,写属性
// 设置属性用于传值
@property (nonatomic, copy)NSString *receiveStr;
3、在第二级控制器的.m文件,利用代理属性,去调用协议里面的方法(同时把参数传出去)
// 3.自己创建返回按钮,下面实现方法
UIBarButtonItem *left = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(leftDidClicked:)];
self.navigationItem.leftBarButtonItem = left;
[left release];
}
#pragma mark - 实现点击方法
- (void)leftDidClicked:(UIBarButtonItem *)sender
{
if (self.delegate && [self.delegate respondsToSelector:@selector(translateValueFromSecondToFirst:)]) {
// 代理去执行方法
[self.delegate translateValueFromSecondToFirst:@"李莫愁"];
}
[self.navigationController popViewControllerAnimated:YES];
}
4、在第一级控制器里面遵守协议
// 4.遵守协议
@interface RootViewController ()<SecondViewControllerDelegate>
5、在第一级控制器里面设置代理
// 5. 设置代理方法
secondVC.delegate = self;
6、在第一级控制器里面实现代理方法
// 6.实现代理方法
#pragma mark - 实现代理方法
- (void)translateValueFromSecondToFirst:(NSString *)string
{
NSLog(@"%@",string);
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/yadong_zhao/article/details/46808807