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

相關文章
相關標籤/搜索