PickerView
系统UIPickerView、UIDatePicker的封装,国内城市选择器的封装,提供了从屏幕底部逐渐弹出的交互效果
特点
- 动画样式为从屏幕底部以一定速率弹出来,支持屏幕旋转
- 自定义性强
- 支持普通
UIPickerView
- 支持
UIDatePicker
- 支持城市选择器,且支持省、省市、省市区三种模式
效果预览
安装
手动
推荐使用CocoaPods
CocoaPods
- 所有模块
pod 'GLPickerView'
- 普通
Picker
模块
pod 'GLPickerView/Common'
- 城市选择器模块
pod 'GLPickerView/City'
如果提示未找到,先执行pod repo update
,再执行pod install
。理论上支持iOS 8.0
以上系统
使用(具体用法请查看Demo,使用方法非常简单)
- 普通
PickerView
let pickerView = GLPickerView()
pickerView.titlesForComponents = titles
pickerView.defaultToolBar.titleLabel.text = "普通PickerView"
pickerView.selectRow(1, inComponent: 0, animated: false)
pickerView.selectRow(2, inComponent: 1, animated: false)
pickerView.show { (selectIndexs) in
print("selectIndexs: \(selectIndexs)")
}
- 自定义
ToolBar
的普通PickerView
let pickerView = GLPickerView()
pickerView.titlesForComponents = titles
pickerView.toolBar = self.customToolBar // 使用自定义的`toolBar`
pickerView.toolBarHeight = 49.0 // 修改`toolBar`高度
pickerView.selectRow(1, inComponent: 0, animated: false)
pickerView.selectRow(2, inComponent: 1, animated: false)
pickerView.show { (selectIndexs) in
print("selectIndexs: \(selectIndexs)")
}
DatePickerView
let datePickerView = GLDatePickerView()
datePickerView.defaultToolBar.titleLabel.text = "DatePickerView"
datePickerView.datePickerView.minimumDate = Date().addingTimeInterval(-5*365*24*60*60) // 往前推5年
datePickerView.datePickerView.maximumDate = Date().addingTimeInterval(5*365*24*60*60) // 往后推5年
datePickerView.datePickerView.datePickerMode = .date
if #available(iOS 13.4, *) { /* iOS 13.4 之后新增加的属性 */
datePickerView.datePickerView.preferredDatePickerStyle = UIDatePickerStyle.wheels // 最好设置为`wheels`,否则不能选择时间
}
datePickerView.show { (selectDate) in
print("selectDate: \(selectDate)")
}
- 城市选择器
let cityPickerView = GLCityPickerView()
cityPickerView.enableDebugLog = true
cityPickerView.cityPickerType = .province_city_district
cityPickerView.show { [weak cityPickerView] (selectIndexs) in
print("selectIndexs:\(selectIndexs)")
guard let cityPickerView = cityPickerView else { return }
guard let currentSelectModel = cityPickerView.currentSelectModel else { return }
switch cityPickerView.cityPickerType {
case .province_city_district:
let secondIndex = selectIndexs[1]
let thirdIndex = selectIndexs[2]
let province = currentSelectModel.areaName
let cityModel = currentSelectModel.nexts[secondIndex]
let city = cityModel.areaName
let districtModel = cityModel.nexts[thirdIndex]
let district = districtModel.areaName
print("\(province) - \(city) - \(district)")
case .province_city:
let secondIndex = selectIndexs[1]
let province = currentSelectModel.areaName
let cityModel = currentSelectModel.nexts[secondIndex]
let city = cityModel.areaName
print("\(province) - \(city)")
case .province:
let province = currentSelectModel.areaName
print("\(province)")
}
}
使用过程中的注意事项
GLPickerToolBar
为内置的ToolBar
,如果不满足需求,可以自定义view,然后赋值给toolBar
属性。- 目前城市选择器只支持省、省市、省市区三种模式,如需显示其他模式,比如还要显示街道那种,请自行定义。
- 在使用城市选择器时,不要手动去设置
titlesForComponents
、attributeTitlesForComponents
。 - 目前动画样式为从屏幕底部以一定速率弹出来,暂不支持其他动画样式。
更新记录(倒叙)
1、1.0.1(2020.10.25)
- 微调
1、1.0.0(2020.10.25)
- 发布首个版本
补充
该仓库会不断进行优化,在使用过程中,有任何建议或问题,欢迎提issue,或者通过邮箱[email protected]联系我
喜欢就star