iPhone开源系列:数据绑定

在项目开发中,数据之间常常存在着联动现象。一个数据的变化就会引发其余数据相应的变化。好比在以下的颜色选择器中,输入不一样的R、G、B值预览的颜色就会变化。实现起来一般会有几种方式:git

1  在改变R、G、B值的同时手动改变预览颜色值。一般在非事件驱动的UI系统中使用。github

2  注册R、G、B值对应控件的事件监听器,并在事件处理函数中进行预览颜色的更新。一般应用在事件驱动的UI系统中,好比MFC、WinForm等。ide

3  将R、G、B和预览颜色值进行绑定,一方的变化都会自动引起另外一方的变化。这种技术是事件驱动的一种延伸。目前不少主流的UI系统都可以支持,好比QT、WPF等。函数

 

colorpicker2

    对于事件驱动和数据绑定之间的不一样,能够参照以下的齿轮啮合图。事件驱动中每一个齿轮都是隔开的,一个齿轮转动会通知一个处理过程,并有处理过程触发相关齿轮的转动。而数据绑定则比如啮合齿轮,一个转动会自动带动其余齿轮,无需人工干预或者其余处理机制。iOS的UI开发中是遵循事件驱动的,但没有提供数据绑定。不过因为支持了KVO(键值观察机制),实现数据绑定就相对比较天然和容易。github上的Binding库就提供了这样一个解决方案。orm

122er

 

 

基于Binding的代码片断以下:blog

- (void)viewDidLoad;
{
    [super viewDidLoad];
    [ILBinding bindingWithKeyPath:@"red"
                    ofSourceObject:self
                    boundToKeyPath:@"value"
                 ofTargetUIControl:self.redSlider
                           options:[ILBindingOptions optionsWithDefaultValues]];
     [ILBinding bindingWithKeyPath:@"green"
                    ofSourceObject:self
                    boundToKeyPath:@"value"
                 ofTargetUIControl:self.greenSlider
                           options:[ILBindingOptions optionsWithDefaultValues]];
     [ILBinding bindingWithKeyPath:@"blue"
                    ofSourceObject:self
                    boundToKeyPath:@"value"
                    ofTargetUIControl:self.blueSlider
                           options:[ILBindingOptions optionsWithDefaultValues]];
     ];
    [bindings addObject:
     [ILBinding bindingWithKeyPath:@"selectedColor"
                    ofSourceObject:self
                    boundToKeyPath:@"backgroundColor"
                 ofTargetObject:self.colorDisplayView
                           options:[ILBindingOptions optionsWithDefaultValues]]
     ];
    ……
}事件

 

实现起来很像啮合齿轮吧?是否有些小当心动呢?赶快下载试试吧~开发

 

项目连接:https://github.com/millenomi/Bindingget