項目案列
案例是用戶反饋界面,當(dāng)用戶點擊推薦列表的btn或者在輸入框輸入內(nèi)容的時候塞帐,提交反饋的按鈕的isEnabled狀態(tài)實時更新燎悍,使用Swift3代碼
實時更新被點中的數(shù)組狀態(tài)
初始化listCount變量父能,該變量代表了當(dāng)前推薦列表的btn數(shù)量是否大于0宽菜,初始化checkedList谣膳,代表被選中的btn數(shù)量
let listCount: Variable<Bool> = Variable(false)
var checkedList: [DriverFeedbackModel] = [DriverFeedbackModel]()
實現(xiàn)點擊btn的方法,通過判斷btn的isSelected狀態(tài)赋焕,checkedList增刪btn代表的model數(shù)據(jù)参歹,listCount的值根據(jù)checkedList的數(shù)量進行賦值
checkedList.append(list[sender.tag])
checkedList = checkedList.filter({$0 !== list[sender.tag]})//實現(xiàn)數(shù)組的remove效果
func clickRecommandBtn(_ sender: UIButton) {
if sender.isSelected == false {
sender.layer.borderColor = AppConfig.XXT_Green.cgColor
sender.isSelected = true
if let list = listData {
checkedList.append(list[sender.tag])
}
}
else {
sender.layer.borderColor = AppConfig.XXT_LightGray.cgColor
sender.isSelected = false
if let list = listData {
checkedList = checkedList.filter({$0 !== list[sender.tag]})//實現(xiàn)數(shù)組的remove效果
}
}
listCount.value = !checkedList.isEmpty
}
listCount的值根據(jù)選中的btn數(shù)量實時變化
listCount.value = !checkedList.isEmpty
聯(lián)合textView.rx.text信號和listCount信號,綁定到提交按鈕的isEnabled狀態(tài)
在方法體內(nèi)返回bool值
{ ($0 == true || !$1.isEmpty) && $1.characters.count < 151 }
綁定到submitBtn的rx.isEnabled隆判,根據(jù)方法體內(nèi)返回bool值實時修改isEnabled值
bind(to: submitBtn.rx.isEnabled)
Observable.combineLatest(listCount.asObservable(), textView.rx.text.orEmpty.asObservable()){ ($0 == true || !$1.isEmpty) && $1.characters.count < 151 }.bind(to: submitBtn.rx.isEnabled).addDisposableTo(disposeBag)
對textview的非法字符進行過濾
把textview.rx.text轉(zhuǎn)換成Observable犬庇,監(jiān)聽map方法,bind to textview
textView.rx.text.orEmpty.asObservable().distinctUntilChanged().map({
$0.trimmingCharacters(in: CharacterSet(charactersIn: "[\"'<>%;]"))
}).bind(to: textView.rx.text).addDisposableTo(disposeBag)
完結(jié)
這里有代碼片段侨嘀,可以作為參考