2016-04-14 25 views
0

我正在開發一個iOS項目。我的ViewController上有一個UISlider。 我想將Float屬性(var)綁定到當前的滑塊值。 如果我更改此屬性值,我想自動更新我的滑塊位置。 如果我移動我的滑塊,我想自動更新屬性值。將滑塊關聯到Float屬性

我已經使它與代表等東西手動工作,但我想知道是否有最簡單的方法。事實上,我有很多(非常巨大的)UISliders,並且值可以從程序的其他部分改變。

我知道在C#中,例如可以觀察一個值並將其與UI組件綁定。我想快速做同樣的事情

+0

VAR myProgressFloat:CGFloat的{ didSet { self.progress = myProgressFloat }} 我 –

+0

撒了謊,你想要的值來更新你的設置和接收的變量都occassions您將需要使用的get/set屬性屬性 –

+4

'var myProgressFloat:CGFloat { get { return slider.value} set(value){slider.value = value}}' –

回答

0

有很多方法可以做到這一點,許多庫可以幫助你完成這項任務。

我喜歡Bond

它可讓您觀察屬性值,而不需要didSet樣板,並幫助您保持代碼清潔。

例如,這不正是你在找什麼:(!反之亦然)

import Bond 

let ageSlider = UISlider() 
let age = Observable<Float>(0) 
ageSlider.bnd_value.bidirectionalBindTo(age) 

這有助於你保持MVC或MVVM模式,因爲更改模型屬性也將更新UI的時候了:

age.Value = 18 
print(ageSlider.value) // Prints 18 

您也可以組合值成一個單一的一個:

let slider1 = UISlider() 
let slider2 = UISlider() 
let averageValue = combineLatest(slider1.bnd_value, slider2.bnd_value).map{ (v1, v2) in (v1 + v2)/2 } 
averageValue.observe { newValue in 
    print("New average value is \(newValue)") 
} 

更多的信息在the project page