生活随笔
收集整理的這篇文章主要介紹了
RxSwift之UI控件UIPickerView扩展的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、基本用法
① 單列的情況
基本用法
var pickerView
: UIPickerView!
private let stringPickerAdapter
= RxPickerViewStringAdapter<[String]>(components
: [],numberOfComponents
: { _,_,_ in 1 },numberOfRowsInComponent
: { (_, _, items
, _) -> Int inreturn items
.count},titleForRow
: { (_, _, items
, row
, _) -> String? inreturn items
[row
]}
)
pickerView
= UIPickerView()
pickerView
.frame
= CGRect.init(x
: 0, y
: 100, width
: SCREEN_WIDTH, height
: 150)
self.view
.addSubview(pickerView
)
Observable.just(["One", "Two", "Tree"]).bind(to
: pickerView
.rx
.items(adapter
: stringPickerAdapter
)).disposed(by
: disposeBag
)
let button
= UIButton(frame
:CGRect(x
:0, y
:0, width
:SCREEN_WIDTH, height
:50))
button
.center
= self.view
.center
button
.backgroundColor
= UIColor.purple
button
.setTitle("獲取信息",for:.normal
)
button
.rx
.tap
.bind
{ [weak self] inself?.getPickerViewValue()}.disposed(by
: disposeBag
)
self.view
.addSubview(button
)
@objc func getPickerViewValue(){let message
= String(pickerView
.selectedRow(inComponent
: 0))let alertController
= UIAlertController(title
: "被選中的索引為",message
: message
, preferredStyle
: .alert
)let okAction
= UIAlertAction(title
: "OK", style
: .cancel
, handler
: nil)alertController
.addAction(okAction
)self.present(alertController
, animated
: true, completion
: nil)
}
② 多列的情況
pickerView
= UIPickerView()
pickerView
.frame
= CGRect.init(x
: 0, y
: 100, width
: SCREEN_WIDTH, height
: 150)
self.view
.addSubview(pickerView
)
Observable.just([["One", "Two", "Tree"],["A", "B", "C", "D"]]).bind(to
: pickerView
.rx
.items(adapter
: stringPickerAdapter
)).disposed(by
: disposeBag
)
let button
= UIButton(frame
:CGRect(x
:0, y
:0, width
:SCREEN_WIDTH, height
:50))
button
.center
= self.view
.center
button
.backgroundColor
= UIColor.blue
button
.setTitle("獲取信息",for:.normal
)
button
.rx
.tap
.bind
{ [weak self] inself?.getPickerViewValue()}.disposed(by
: disposeBag
)
self.view
.addSubview(button
)
@objc func getPickerViewValue(){let message
= String(pickerView
.selectedRow(inComponent
: 0)) + "-"+ String(pickerView
!.selectedRow(inComponent
: 1))let alertController
= UIAlertController(title
: "被選中的索引為",message
: message
, preferredStyle
: .alert
)let okAction
= UIAlertAction(title
: "OK", style
: .cancel
, handler
: nil)alertController
.addAction(okAction
)self.present(alertController
, animated
: true, completion
: nil)
}
二、修改默認的樣式
- 如下所示,將選項的文字修改成橙色,同時在文字下方加上雙下劃線:
- 要實現這個效果,只需改用 RxPickerViewAttributedStringAdapter 這個可以設置文字屬性的適配器即可,示例如下:
var pickerView
:UIPickerView!
private let attrStringPickerAdapter
= RxPickerViewAttributedStringAdapter<[String]>(components
: [],numberOfComponents
: { _,_,_ in 1 },numberOfRowsInComponent
: { (_, _, items
, _) -> Int inreturn items
.count}){ (_, _, items
, row
, _) -> NSAttributedString? inreturn NSAttributedString(string
: items
[row
],attributes
: [NSAttributedString.Key.foregroundColor
: UIColor.orange
, NSAttributedString.Key.underlineStyle
:NSUnderlineStyle.double
.rawValue
, NSAttributedString.Key.textEffect
:NSAttributedString.TextEffectStyle.letterpressStyle
])}
pickerView
= UIPickerView()
pickerView
.frame
= CGRect.init(x
: 0, y
: 100, width
: SCREEN_WIDTH, height
: 150)
self.view
.addSubview(pickerView
)
Observable.just(["One", "Two", "Tree"]).bind(to
: pickerView
.rx
.items(adapter
: attrStringPickerAdapter
)).disposed(by
: disposeBag
)
三、使用自定義視圖
- 將選項視圖改成單純顯示顏色色塊的 view,其顏色由傳入的值決定:
- 要實現這個效果,只需改用 RxPickerViewViewAdapter 這個可以返回自定義視圖的適配器即可。示例如下:
private let viewPickerAdapter
= RxPickerViewViewAdapter<[UIColor]>(components
: [],numberOfComponents
: { _,_,_ in 1 },numberOfRowsInComponent
: { (_, _, items
, _) -> Int inreturn items
.count}){ (_, _, items
, row
, _, view
) -> UIView inlet componentView
= view
?? UIView()componentView
.backgroundColor
= items
[row
]return componentView
}
pickerView
= UIPickerView()
pickerView
.frame
= CGRect.init(x
: 0, y
: 100, width
: SCREEN_WIDTH, height
: 150)
self.view
.addSubview(pickerView
)
Observable.just([UIColor.red
, UIColor.orange
, UIColor.yellow
]).bind(to
: pickerView
.rx
.items(adapter
: viewPickerAdapter
)).disposed(by
: disposeBag
)
總結
以上是生活随笔為你收集整理的RxSwift之UI控件UIPickerView扩展的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。