BRPickerView 封装的是iOS中常用的选择器组件,主要包括:日期选择器、时间选择器、地址选择器、自定义字符串选择器。高度封装,提供了两种使用方式,支持自定义主题样式,适配深色模式。
【特别提示】:
- 当前最新版本为:
2.3.3
。 - 如果不能找到最新版本,请先执行一下
pod repo update
更新本地仓库,待更新完成后;再执行pod search BRPickerView
进行搜索,就会看到最新版本。
查看并运行 BRPickerViewDemo.xcodeproj
![]() |
![]() |
---|---|
框架Demo运行效果图1 | 框架Demo运行效果图2 |
- 优化代码,配置Pod库的层级目录
- 新增将子视图添加到选择器上的方法
- 解决日期NSString转NSDate时,因时区问题导致部分日期回调为nil问题
- 添加传统的创建对象设置属性的使用方式
- 开放设置选择器颜色及样式,适配深色模式
- 更新省市区数据源,数据与政府官网最新公布的一致(参见:行政区划代码)
- 支持将选择器添加到指定容器视图上
- 修复bug,适配iPad和横屏显示。
- 优化代码,提高框架适应性,降低内存消耗。
- 时间选择器新添加了7种显示类型(BRDatePickerMode),可根据自己项目的需求选择性使用。
- 适配横屏,及 iPhoneX 底部安全区域。
- 修改了最小时间和最大时间的参数名称(以前版本是传 NSString 类型, 现在传 NSDate 类型)
- 修复比较时间大小时出现的bug。
- 修改地址选择器确认选择后的回调参数。
- 现修改如下:可通过省市区的模型获取省市区的 name(名称)、code(id)、index(索引)
resultBlock:^(BRProvinceModel *province, BRCityModel *city, BRAreaModel *area) {}
- 去掉第三方依赖库
MJExtension
,修改为手动解析地址数据源。
- 重命名了Github用户名,更新项目相关的路径。(提示:pod之前的版本不受影响)
- 修复某些情况下无法用bundle加载本地数据源(BRCity.plist)bug。
- 给地址选择器添加了一个方法(见方法4),提供数据源参数,支持外部传入地区数据源。
- 提示:要注意数据源格式,参考 BRCity.json。可以把 BRCity.json 文件的内容放到后台去维护,通过后台接口获取地区数据源(即 BRCity.json 文件的内容)。
- 更新了地址数据源(BRCity.plist),地区信息是2018年最新最全的,与微信的地区信息完全一致。
- 支持自定义默认选择地址(格式:@[@"浙江省", @"杭州市", @"西湖区"]),支持下次点击进入地址选择器时,默认地址为上次选择的结果。
- 修改了日期选择器、地址选择器、字符串选择器的接口方法(删除了之前的方法2)。
- 添加了地址选择器显示类型,支持3种显示:只显示省份、显示省份和城市、显示省市区。
- 添加取消选择的回调方法(点击背景或取消按钮会执行
cancelBlock
) - 合并了字符串选择器 数组数据源和plist数据源对应的方法,
dataSource
参数支持两种类型:
- 添加支持自定义主题颜色的方法。
-
更换第三方依赖库。
-
用MJExtension 替换了 原来的YYModel,以前没有注意导入YYModel,同时又导入YYKit会导致重复导入而冲突(另外使用YYModel时,手动导入和pod导入 其中的头文件和方法名也不一样,所以很容易出错)。
- 初始版本!
-
在 Podfile 中添加
pod 'BRPickerView'
。 -
执行
pod install
或pod update
。 -
导入头文件
#import <BRPickerView.h>
。
-
将与
README.md
同级目录下的BRPickerView
文件夹拽入项目中 -
导入头文件
#import "BRPickerView.h"
。
- iOS 8.0+
- ARC
查看 BRDatePickerView.h 头文件,里面提供了两种使用方式,参见源码。
/// 弹出日期类型
typedef NS_ENUM(NSInteger, BRDatePickerMode) {
// --- 以下4种是系统自带的样式 ---
// UIDatePickerModeTime
BRDatePickerModeTime, // HH:mm
// UIDatePickerModeDate
BRDatePickerModeDate, // yyyy-MM-dd
// UIDatePickerModeDateAndTime
BRDatePickerModeDateAndTime, // yyyy-MM-dd HH:mm
// UIDatePickerModeCountDownTimer
BRDatePickerModeCountDownTimer, // HH:mm
// --- 以下7种是自定义样式 ---
// 年月日时分
BRDatePickerModeYMDHM, // yyyy-MM-dd HH:mm
// 月日时分
BRDatePickerModeMDHM, // MM-dd HH:mm
// 年月日
BRDatePickerModeYMD, // yyyy-MM-dd
// 年月
BRDatePickerModeYM, // yyyy-MM
// 年
BRDatePickerModeY, // yyyy
// 月日
BRDatePickerModeMD, // MM-dd
// 时分
BRDatePickerModeHM // HH:mm
};
- 使用示例(参考Demo):
// 1.创建日期选择器
BRDatePickerView *datePickerView = [[BRDatePickerView alloc]initWithPickerMode:BRDatePickerModeYMD];
// 2.设置属性
datePickerView.title = @"出生年月日";
datePickerView.defaultSelValue = textField.text;
datePickerView.minDate = [NSDate br_setYear:1990 month:3 day:12];
datePickerView.maxDate = [NSDate date];
datePickerView.isAutoSelect = YES;
datePickerView.resultBlock = ^(NSString *selectValue) {
NSLog(@"选择的值:%@", selectValue);
};
// 自定义主题样式
BRPickerStyle *customStyle = [[BRPickerStyle alloc]init];
customStyle.pickerColor = BR_RGB_HEX(0xd9dbdf, 1.0f);
customStyle.pickerTextColor = [UIColor redColor];
customStyle.separatorColor = [UIColor redColor];
datePickerView.pickerStyle = customStyle;
// 3.显示
[datePickerView show];
- 时间选择器显示类型的效果图:
以下4种样式是使用 UIDatePicker 类 进行封装的,支持循环滚动
![]() |
![]() |
---|---|
样式1:BRDatePickerModeTime | 样式2:BRDatePickerModeDate |
![]() |
![]() |
样式3:BRDatePickerModeDateAndTime | 样式4:BRDatePickerModeCountDownTimer |
以下7种样式是使用 UIPickerView 类 进行封装的。
![]() |
![]() |
---|---|
样式5: BRDatePickerModeYMDHM | 样式6: BRDatePickerModeMDHM |
![]() |
![]() |
样式7: BRDatePickerModeYMD | 样式8: BRDatePickerModeYM |
![]() |
![]() |
样式9: BRDatePickerModeY | 样式10: BRDatePickerModeMD |
![]() |
|
样式11: BRDatePickerModeHM |
查看 BRAddressPickerView.h 头文件,里面提供了两种使用方式,参见源码。
- 使用示例(参考Demo):
/// 地址选择器
BRAddressPickerView *addressPickerView = [[BRAddressPickerView alloc]initWithPickerMode:BRAddressPickerModeArea];
addressPickerView.title = @"请选择地区";
addressPickerView.defaultSelectedArr = @[@"浙江省", @"杭州市", @"西湖区"];
addressPickerView.isAutoSelect = YES;
addressPickerView.resultBlock = ^(BRProvinceModel *province, BRCityModel *city, BRAreaModel *area) {
NSLog(@"选择的值:%@", [NSString stringWithFormat:@"%@ %@ %@", province.name, city.name, area.name]);
};
// 自定义主题样式(适配深色模式)
addressPickerView.pickerStyle = [self pickerStyleWithDarkModel];
[addressPickerView show];
- 地址选择器的3种显示类型(showType 的3个枚举值):
![]() |
![]() |
---|---|
样式1:BRAddressPickerModeProvince | 样式2:BRAddressPickerModeCity |
![]() |
|
样式3:BRAddressPickerModeArea |
查看 BRStringPickerView.h 头文件,里面提供了两种使用方式,参见源码。
- 使用示例(参考Demo):
/// 单列字符串选择器
BRStringPickerView *stringPickerView = [[BRStringPickerView alloc]initWithPickerMode:BRStringPickerComponentSingle];
stringPickerView.title = @"请选择性别";
stringPickerView.dataSourceArr = @[@"男", @"女", @"其他"];
stringPickerView.selectValue = textField.text;
stringPickerView.resultModelBlock = ^(BRResultModel *resultModel) {
NSLog(@"选择的值:%@", resultModel.selectValue);
};
[stringPickerView show];
/// 多列字符串选择器
BRStringPickerView *stringPickerView = [[BRStringPickerView alloc]initWithPickerMode:BRStringPickerComponentMulti];
stringPickerView.title = @"自定义多列字符串";
stringPickerView.dataSourceArr = @[@[@"第1周", @"第2周", @"第3周", @"第4周", @"第5周", @"第6周", @"第7周"], @[@"第1天", @"第2天", @"第3天", @"第4天", @"第5天", @"第6天", @"第7天"]];
stringPickerView.selectValueArr = [textField.text componentsSeparatedByString:@","];
stringPickerView.isAutoSelect = YES;
stringPickerView.resultModelArrayBlock = ^(NSArray<BRResultModel *> *resultModelArr) {
NSLog(@"选择的值:%@", [NSString stringWithFormat:@"%@,%@", resultModelArr[0].selectValue, resultModelArr[1].selectValue]);
};
// 自定义主题样式
addressPickerView.pickerStyle = [BRPickerStyle pickerStyleWithThemeColor:[UIColor orangeColor]];
[stringPickerView show];
- 字符串选择器效果图:
![]() |
![]() |
---|---|
单列字符串选择器(默认主题色样式) | 双列字符串选择器(自定义主题色样式) |
![]() |
![]() |
---|---|
3列字符串选择器(自定义主题色样式) | 4列字符串选择器(自定义主题色样式) |
BRPickerView 使用 MIT 许可证,详情见 LICENSE 文件。