iOS-ReactiveCocoa(RAC)的高级使用之视图与模型的双向绑定
2017-08-10 14:26
417 查看
1. 在传统的MVC模型中,控制器负责模型与视图交互,只能单向的,模型到视图,模型的改变,影响着视图的改变。
2. 但是无法实现视图内容的改变影响模型数据的改变。
3. 通过RAC实现视图与模型的双向绑定,意思是当模型发生改变时,视图数据发生变化,与此同时,当视图数据发生改变时,模型的数据也跟着改变。
iOS中目前只能通过RAC来完成双向绑定
这里通过具体代码来实现双向绑定
• 自定义一个模型Person,有name、age、height三个属性
• 自定义一个视图,包含nameField、ageField、heightField三个输入框
• 需求:完成视图中三个输入框内部的内容显示为Person类对应属性的值,当Person类内容改变时,对应输入框的内部内容也改变;如果输入框的内部内容发生改变,Person实例的属性也改变。
模型 –> UI 的绑定(模型发生改变,UI跟着改变)
// 字符串的绑定
RAC(_nameField,text) = RACObserve(p, name);
// 基本数据类型的绑定
RAC(_ageField,text) = [RACObserve(p, age) map:^id _Nullable(id
_Nullable value) {
return [value description];
}];
RAC(_heightField,text) = [RACObserve(p, height) map:^id _Nullable(id
_Nullable value) {
return [value description];
}];
UI –> 模型的绑定(UI发生改变,模型跟着改变)
[[RACSignal combineLatest:@[_nameField.rac_textSignal,_ageField.rac_textSignal,_heightField.rac_textSignal]] subscribeNext:^(RACTuple *x) {
p.name = x.first;
p.age = [x.second integerValue];
p.height = [x.third doubleValue];
}];
最后:当修改模型数据后,不需要赋值,UI即可显示模型对应的数据
当修改UI界面中输入框内部的内容时,模型的数据也跟着改变了,可以通过打印看出结果。
2. 但是无法实现视图内容的改变影响模型数据的改变。
3. 通过RAC实现视图与模型的双向绑定,意思是当模型发生改变时,视图数据发生变化,与此同时,当视图数据发生改变时,模型的数据也跟着改变。
iOS中目前只能通过RAC来完成双向绑定
这里通过具体代码来实现双向绑定
• 自定义一个模型Person,有name、age、height三个属性
• 自定义一个视图,包含nameField、ageField、heightField三个输入框
• 需求:完成视图中三个输入框内部的内容显示为Person类对应属性的值,当Person类内容改变时,对应输入框的内部内容也改变;如果输入框的内部内容发生改变,Person实例的属性也改变。
模型 –> UI 的绑定(模型发生改变,UI跟着改变)
// 字符串的绑定
RAC(_nameField,text) = RACObserve(p, name);
// 基本数据类型的绑定
RAC(_ageField,text) = [RACObserve(p, age) map:^id _Nullable(id
_Nullable value) {
return [value description];
}];
RAC(_heightField,text) = [RACObserve(p, height) map:^id _Nullable(id
_Nullable value) {
return [value description];
}];
UI –> 模型的绑定(UI发生改变,模型跟着改变)
[[RACSignal combineLatest:@[_nameField.rac_textSignal,_ageField.rac_textSignal,_heightField.rac_textSignal]] subscribeNext:^(RACTuple *x) {
p.name = x.first;
p.age = [x.second integerValue];
p.height = [x.third doubleValue];
}];
最后:当修改模型数据后,不需要赋值,UI即可显示模型对应的数据
当修改UI界面中输入框内部的内容时,模型的数据也跟着改变了,可以通过打印看出结果。
相关文章推荐
- iOS-ReactiveCocoa(RAC)的高级使用之视图与模型的双向绑定
- ASP.NET Web API实践系列07,获取数据, 使用Ninject实现依赖倒置,使用Knockout实现页面元素和视图模型的双向绑定
- winform上视图模型双向绑定 TView 的使用
- iOS MJExtension字典转模型高级使用技巧
- IOS的基本控件的使用-UIScrollView滚动视图的高级功能
- angular.js 中同步视图和模型数据双向绑定,$watch $digest $apply 机制
- iOS-ReactiveCocoa(RAC)的初步了解以及基本使用
- iOS【ReactiveCocoa的使用(RAC的属性监听)】
- 该篇博客是在《iOS高级开发——CollectionView的动态增删cell及模型重构》的基础上继续进行开发的。在之前那篇博客中,我们实现了动态的增删cell,并且使用了模型Model进行重构
- Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(7/19)
- Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(14/19)
- 【原创翻译】深入理解javascript事件处理函数绑定三部曲(三)——高级事件函数绑定模型
- 使用NHibernate绑定页面数据时,出现"未能加载视图状态,正在向其中加载视图状态。。。。"的Bug
- 使用rails高效开发之快速创建控制器 视图 模型和数据库文件
- IOS学习之Tab Bar的使用和视图切换
- 爱上MVC3系列~使用视图模型的好处及与数据模型之间的赋值问题
- 使用rails高效开发之快速创建控制器 视图 模型和数据库文件
- IOS 应用视图交互模型分析
- WCF 第四章 绑定 使用高级Web 服务通信
- Eclipse 中的 JFace 数据绑定,第 3 部分: 使用高级功能(8/19)