生活随笔
收集整理的这篇文章主要介绍了
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扩展的使用的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。