您的位置:首页 > 产品设计 > UI/UE

UI 07 界面传值 之 从后向前 ---- 协议传值

2015-08-29 09:11 405 查看
哎呀… 好久没有写博客了, 今天可以好好的整理一下啦.

前一篇写的是从前向后的属性传值,比较简单.今天要写的协议传值, 就比较麻烦了.

但是之后会更新使用block的方法完成从后向前传值, 会比较简单.

协议传值的六步还记得么?

第一步: 声明一份协议, 写明协议内容

第二步: 设置代理人属性.

第三步: 设置代理人需要完成协议内容里的方法

第四步: 引头文件, 代理人签订协议

第五步: 设置代理人

第六步: 代理人完成协议中的内容

第一步第二步:

在第二个页面的.h 中声明协议

#import <UIKit/UIKit.h>
// 协议传值的第一步: 声明一份协议,写方法
@protocol SecondViewControllerDelegate <NSObject>
// 协议方法:
- (void)changeValue:(NSString *)value;

@end

@interface SecondViewController : UIViewController
// 协议第二步:设置代理人属性
@property(nonatomic, assign)id<SecondViewControllerDelegate>delegate;
@end


第三步:

在第二个页面的.m中

当然我们是在点击第二页的button时,使用模态或者视图控制器才转到第一个页面.

所以第三步写在button的点击事件中.

// 点击返回,是协议的触发条件
- (void)buttonAction:(UIButton *)button{

[self.navigationController popViewControllerAnimated:YES];
// 协议第三步: 设置代理人需要完成的协议方法.
[self.delegate changeValue:self.textField.text];

}


第四步:

当我们使用系统中的协议时, 就只需要从第四步开始写.

在第一页的.m的延展部分签订

#import "MainViewController.h"
#import "SecondViewController.h"
//协议传值第四步: 签订协议.
@interface MainViewController ()<SecondViewControllerDelegate>

@end


第五步:

- (void)buttonAction:(UIButton *)button{
//push到下一页
SecondViewController *secondVC = [[SecondViewController alloc] init];
// 协议传值第五步: 设置代理人
secondVC.delegate = self;
[self.navigationController pushViewController:secondVC animated:YES];
}


第六步:

// 协议传值第六步: 实现协议方法.
- (void)changeValue:(NSString *)value{
self.label.text = value;
NSLog(@"%@",value);
}


可以看到我们从后向前传了一个textFiled中的text.

好啦. 通过这六步我们就完成了从后向前传值.

协议传值不是很难,只要理解了就能够记得住.加油!

当然, 协议传值是非常重要的,大家一定要能够熟练使用.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: