GLPickerView 1.0.1

GLPickerView 1.0.1

Maintained by yinhe.



  • By
  • liujunliuhong

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属性。
  • 目前城市选择器只支持省、省市、省市区三种模式,如需显示其他模式,比如还要显示街道那种,请自行定义。
  • 在使用城市选择器时,不要手动去设置titlesForComponentsattributeTitlesForComponents
  • 目前动画样式为从屏幕底部以一定速率弹出来,暂不支持其他动画样式。

更新记录(倒叙)

1、1.0.1(2020.10.25)

  • 微调

1、1.0.0(2020.10.25)

  • 发布首个版本

补充

该仓库会不断进行优化,在使用过程中,有任何建议或问题,欢迎提issue,或者通过邮箱[email protected]联系我
喜欢就star❤️一下吧