{"id":15126905,"url":"https://github.com/agiapp/brpickerview","last_synced_at":"2025-05-14T17:10:36.158Z","repository":{"id":41384205,"uuid":"99986640","full_name":"agiapp/BRPickerView","owner":"agiapp","description":"BRPickerView 封装的是iOS中常用的选择器组件，主要包括：日期选择器（支持年月日、年月等15种日期样式选择，支持设置星期、至今等）、地址选择器（支持省市区、省市、省三种地区选择）、自定义字符串选择器（支持单列、多列、二级联动、三级联动选择）。支持自定义主题样式，适配深色模式，支持将选择器组件添加到指定容器视图。","archived":false,"fork":false,"pushed_at":"2025-04-22T08:12:29.000Z","size":10789,"stargazers_count":2612,"open_issues_count":16,"forks_count":454,"subscribers_count":32,"default_branch":"master","last_synced_at":"2025-05-14T17:09:48.369Z","etag":null,"topics":["countdowntimer","date","datepicker","picker","pickerview","region","time","uidatepicker","uipickerview"],"latest_commit_sha":null,"homepage":"https://github.com/agiapp/BRPickerView","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/agiapp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-08-11T03:12:22.000Z","updated_at":"2025-05-12T06:31:28.000Z","dependencies_parsed_at":"2022-08-10T02:07:05.773Z","dependency_job_id":"9d69e920-864b-4322-b23a-660dbfd3afc6","html_url":"https://github.com/agiapp/BRPickerView","commit_stats":{"total_commits":532,"total_committers":5,"mean_commits":106.4,"dds":"0.28195488721804507","last_synced_commit":"e0b925928b4178ea30fbb766bbdf85ef51713efc"},"previous_names":["91renb/brpickerview"],"tags_count":55,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agiapp%2FBRPickerView","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agiapp%2FBRPickerView/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agiapp%2FBRPickerView/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agiapp%2FBRPickerView/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/agiapp","download_url":"https://codeload.github.com/agiapp/BRPickerView/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254190394,"owners_count":22029632,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["countdowntimer","date","datepicker","picker","pickerview","region","time","uidatepicker","uipickerview"],"created_at":"2024-09-26T02:02:58.382Z","updated_at":"2025-05-14T17:10:36.145Z","avatar_url":"https://github.com/agiapp.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BRPickerView\n\nBRPickerView 封装的是iOS中常用的选择器组件，主要包括：**`BRDatePickerView`** 日期选择器（支持年月日、年月等15种日期样式选择，支持设置星期、至今等）、**`BRTextPickerView`** 文本选择器（支持单列、多列、省市区、省市、省、自定义多级联动选择）。支持自定义主题样式，适配深色模式，支持将选择器组件添加到指定容器视图。\n\n⚠️【特别说明】\n\n\u003e- 从 `V2.9.0` 版本起，新增了`BRTextPickerView` 组件，用于替代 `BRAddressPickerView` 和 `BRStringPickerView` 两个旧组件（目前这两个旧组件做了兼容，可以继续使用，后续会废弃掉，建议使用 `BRTextPickerView` 新组件进行替代）\n\u003e- `V2.8.8`之前老版本，在iOS18+系统上，会因 `maskView` 命名出现崩溃问题，请及时升级到最新版本。\n\u003e- 如果不能找到最新版本，请先执行一下 `pod repo update ` 更新本地仓库，使 CocoaPods 能识别最新可用的库版本。 \n\n#### 📒 稀土掘金：https://juejin.cn/post/6844903605468676104\n\n\n\n# 效果演示\n\n查看并运行 `BRPickerViewDemo.xcodeproj`\n\n| ![效果图1](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/a.gif?raw=true) | ![效果图2](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/b.gif?raw=true) |\n| :----------------------------------------------------------: | :----------------------------------------------------------: |\n|                     框架Demo运行效果图1                      |                     框架Demo运行效果图2                      |\n\n# 安装\n\n#### CocoaPods\n\n1. 在 Podfile 中添加 `pod 'BRPickerView'`\n2. 执行 `pod install` 或 `pod update` \n3. 导入头文件 ` #import \u003cBRPickerView.h\u003e`\n\n\u003e安装说明：\n\u003e\n\u003e**pod 'BRPickerView'** ：默认是安装全部组件（包含：`BRDatePickerView` 、 `BRTextPickerView` ，和废弃的`BRAddressPickerView` 、`BRStringPickerView` 组件），等价于：`pod 'BRPickerView/All'`\n\u003e\n\u003e**pod 'BRPickerView/Default'** ：仅安装`BRDatePickerView` 和 `BRTextPickerView` 组件\n\n\n#### 手动导入\n\n1. 将与 `README.md` 同级目录下的 `BRPickerView` 文件夹拽入项目中\n\n2. 导入头文件 ` #import \"BRPickerView.h\"`。\n\n\n# 系统要求\n\n- iOS 9.0+\n- ARC\n\n# 使用\n\n### 时间选择器：`BRDatePickerView`\n\n查看 BRDatePickerView.h 头文件，里面提供了两种使用方式，参见源码。\n\n```objective-c\n/// 日期选择器格式\ntypedef NS_ENUM(NSInteger, BRDatePickerMode) {\n    // ----- 以下4种是系统样式（兼容国际化日期格式） -----\n    /** 【yyyy-MM-dd】UIDatePickerModeDate（美式日期：MM-dd-yyyy；英式日期：dd-MM-yyyy）*/\n    BRDatePickerModeDate,\n    /** 【yyyy-MM-dd HH:mm】 UIDatePickerModeDateAndTime */\n    BRDatePickerModeDateAndTime,\n    /** 【HH:mm】UIDatePickerModeTime */\n    BRDatePickerModeTime,\n    /** 【HH:mm】UIDatePickerModeCountDownTimer */\n    BRDatePickerModeCountDownTimer,\n    \n    // ----- 以下14种是自定义样式 -----\n    /** 【yyyy-MM-dd HH:mm:ss】年月日时分秒 */\n    BRDatePickerModeYMDHMS,\n    /** 【yyyy-MM-dd HH:mm】年月日时分 */\n    BRDatePickerModeYMDHM,\n    /** 【yyyy-MM-dd HH】年月日时 */\n    BRDatePickerModeYMDH,\n    /** 【MM-dd HH:mm】月日时分 */\n    BRDatePickerModeMDHM,\n    /** 【yyyy-MM-dd】年月日（兼容国际化日期：dd-MM-yyyy）*/\n    BRDatePickerModeYMD,\n    /** 【yyyy-MM】年月（兼容国际化日期：MM-yyyy）*/\n    BRDatePickerModeYM,\n    /** 【yyyy】年 */\n    BRDatePickerModeY,\n    /** 【MM-dd】月日 */\n    BRDatePickerModeMD,\n    /** 【HH:mm:ss】时分秒 */\n    BRDatePickerModeHMS,\n    /** 【HH:mm】时分 */\n    BRDatePickerModeHM,\n    /** 【mm:ss】分秒 */\n    BRDatePickerModeMS,\n    \n    /** 【yyyy-qq】年季度 */\n    BRDatePickerModeYQ,\n    /** 【yyyy-MM-ww】年月周 */\n    BRDatePickerModeYMW,\n    /** 【yyyy-ww】年周 */\n    BRDatePickerModeYW\n};\n```\n\n- 使用示例（参考Demo）：\n\n```objective-c\n// 1.创建日期选择器\nBRDatePickerView *datePickerView = [[BRDatePickerView alloc]init];\n// 2.设置属性\ndatePickerView.pickerMode = BRDatePickerModeYMD;\ndatePickerView.title = @\"选择年月日\";\n// datePickerView.selectValue = @\"2019-10-30\";\ndatePickerView.selectDate = [NSDate br_setYear:2019 month:10 day:30];\ndatePickerView.minDate = [NSDate br_setYear:1949 month:3 day:12];\ndatePickerView.maxDate = [NSDate date];\ndatePickerView.isAutoSelect = YES;\ndatePickerView.resultBlock = ^(NSDate *selectDate, NSString *selectValue) {\n    NSLog(@\"选择的值：%@\", selectValue);\n};\n// 设置自定义样式\nBRPickerStyle *customStyle = [[BRPickerStyle alloc]init];\ncustomStyle.pickerColor = BR_RGB_HEX(0xd9dbdf, 1.0f);\ncustomStyle.pickerTextColor = [UIColor redColor];\ncustomStyle.separatorColor = [UIColor redColor];\ndatePickerView.pickerStyle = customStyle;\n\n// 3.显示\n[datePickerView show];\n```\n\n**时间选择器显示类型的效果图（默认样式）：**\n\n- 以下4种样式是使用 UIDatePicker 类 进行封装的，支持循环滚动\n\n| ![样式1：BRDatePickerModeTime](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type1.png?raw=true) | ![样式2：BRDatePickerModeDate](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type2.png?raw=true) |\n| :----------------------------------------------------------: | :----------------------------------------------------------: |\n|                 样式1：BRDatePickerModeDate                  |              样式2：BRDatePickerModeDateAndTime              |\n|                                                              |                                                              |\n| ![样式3：BRDatePickerModeDateAndTime](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type3.png?raw=true) | ![样式4：BRDatePickerModeCountDownTimer](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type4.png?raw=true) |\n|                 样式3：BRDatePickerModeTime                  |            样式4：BRDatePickerModeCountDownTimer             |\n\n- 以下11种样式是使用 UIPickerView 类进行封装的。\n\n| ![样式5：BRDatePickerModeYMDHMS](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type5.png?raw=true) | ![样式6：BRDatePickerModeYMDHM](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type6.png?raw=true) |\n| :----------------------------------------------------------: | :----------------------------------------------------------: |\n|                样式5：BRDatePickerModeYMDHMS                 |                 样式6：BRDatePickerModeYMDHM                 |\n|                                                              |                                                              |\n| ![样式7：BRDatePickerModeYMDH](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type7.png?raw=true) | ![样式8：BRDatePickerModeMDHM](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type8.png?raw=true) |\n|                 样式7：BRDatePickerModeYMDH                  |                 样式8：BRDatePickerModeMDHM                  |\n|                                                              |                                                              |\n| ![样式9：BRDatePickerModeYMDE](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type9.png?raw=true) | ![样式10：BRDatePickerModeYMD](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type10.png?raw=true) |\n|                  样式9：BRDatePickerModeYMD                  |                  样式10：BRDatePickerModeYM                  |\n|                                                              |                                                              |\n| ![样式11：BRDatePickerModeYM](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type11.png?raw=true) | ![样式12：BRDatePickerModeY](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type12.png?raw=true) |\n|                  样式11：BRDatePickerModeY                   |                  样式12：BRDatePickerModeMD                  |\n|                                                              |                                                              |\n| ![样式13：BRDatePickerModeMD](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type13.png?raw=true) | ![样式14：BRDatePickerModeHMS](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type14.png?raw=true) |\n|                 样式13：BRDatePickerModeHMS                  |                  样式14：BRDatePickerModeHM                  |\n|                                                              |                                                              |\n| ![样式15：BRDatePickerModeHM](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type15.png?raw=true) |                                                              |\n|                  样式15：BRDatePickerModeMS                  |                                                              |\n\n- 其它日期样式\n\n| ![设置显示星期](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_week1.png?raw=true) | ![设置显示星期](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_week2.png?raw=true) |\n| ------------------------------------------------------------ | ------------------------------------------------------------ |\n| 设置显示星期：datePickerView.showWeek = YES;                 | 设置显示星期：datePickerView.showWeek = YES;                 |\n|                                                              |                                                              |\n| ![设置添加至今](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_now.png?raw=true) | ![设置显示今天](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_today.png?raw=true) |\n| 设置添加至今：datePickerView.addToNow = YES;                 | 设置显示今天：datePickerView.showToday = YES;                |\n|                                                              |                                                              |\n| ![日期单位单行显示样式](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_unit.png?raw=true) | ![自定义选择器选中行颜色](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_row.png?raw=true) |\n| 日期单位显示样式：datePickerView.showUnitType = BRShowUnitTypeOnlyCenter; | 设置选择器中间选中行的背景颜色：selectRowColor               |\n\n```objective-c\n// 设置选择器中间选中行的样式\nBRPickerStyle *customStyle = [[BRPickerStyle alloc]init];\ncustomStyle.selectRowColor = [UIColor blueColor];\ncustomStyle.selectRowTextFont = [UIFont boldSystemFontOfSize:20.0f];\ncustomStyle.selectRowTextColor = [UIColor redColor];\ndatePickerView.pickerStyle = customStyle;\n```\n\n| ![英式日期年月日](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_en1.png?raw=true) | ![英式日期年月](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_en2.png?raw=true) |\n| ------------------------------------------------------------ | ------------------------------------------------------------ |\n| 样式：BRDatePickerModeYMD （默认非中文环境显示英式日期）     | 样式：BRDatePickerModeYM （默认非中文环境显示英式日期）      |\n\n- 几种常见的弹框样式模板\n\n| ![模板样式1](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/template_style1.png?raw=true) | ![模板样式2](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/template_style2.png?raw=true) |\n| ------------------------------------------------------------ | ------------------------------------------------------------ |\n| 弹框样式模板1：datePickerView.pickerStyle = [BRPickerStyle pickerStyleWithThemeColor:[UIColor blueColor]]; | 弹框样式模板2：datePickerView.pickerStyle = [BRPickerStyle pickerStyleWithDoneTextColor:[UIColor blueColor]]; |\n|                                                              |                                                              |\n| ![模板样式3](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/template_style3.png?raw=true) | ![添加选择器的头视图](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/date_type_top.png?raw=true) |\n| 弹框样式模板3：datePickerView.pickerStyle = [BRPickerStyle pickerStyleWithDoneBtnImage:[UIImage imageNamed:@\"icon_close\"]]; | 添加选择器的头视图：pickerHeaderView                         |\n\n```objective-c\n// 添加选择器头视图（pickerHeaderView）\nUIView *headerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 36)];\nheaderView.backgroundColor = [[UIColor grayColor] colorWithAlphaComponent:0.1f];\nNSArray *unitArr = @[@\"年\", @\"月\", @\"日\"];\nfor (NSInteger i = 0; i \u003c unitArr.count; i++) {\n    CGFloat width = SCREEN_WIDTH / unitArr.count;\n    CGFloat orginX = i * (SCREEN_WIDTH / unitArr.count);\n    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(orginX, 0, width, 36)];\n    label.backgroundColor = [UIColor clearColor];\n    label.textAlignment = NSTextAlignmentCenter;\n    label.font = [UIFont systemFontOfSize:16.0f];\n    label.textColor = [UIColor darkGrayColor];\n    label.text = unitArr[i];\n    [headerView addSubview:label];\n}\ndatePickerView.pickerHeaderView = headerView;\n```\n\n\n\n### 文本选择器：`BRTextPickerView`\n\n查看 BRTextPickerView.h 头文件，提供了三种类型：\n\n```objective-c\n/// 文本选择器类型\ntypedef NS_ENUM(NSInteger, BRTextPickerMode) {\n    /** 单列选择器 */\n    BRTextPickerComponentSingle,\n    /** 多列选择器 */\n    BRTextPickerComponentMulti,\n    /** 多列联动选择器 */\n    BRTextPickerComponentCascade\n};\n```\n\n#### 1. 单列文本选择器\n\n- 使用示例：\n\n```objective-c\n/// 单列文本选择器\nBRTextPickerView *textPickerView = [[BRTextPickerView alloc]initWithPickerMode:BRTextPickerComponentSingle];\ntextPickerView.title = @\"学历\";\n// 设置数据源\ntextPickerView.dataSourceArr = @[@\"大专以下\", @\"大专\", @\"本科\", @\"硕士\", @\"博士\", @\"博士后\"];\ntextPickerView.selectIndex = self.mySelectIndex;\ntextPickerView.singleResultBlock = ^(BRTextModel * _Nullable model, NSInteger index) {\n  \tNSLog(@\"选择的值：%@\", model.text);\n    self.mySelectIndex = index;\n    textField.text = model.text;\n};\n[textPickerView show];\n```\n\n- 设置数据源有3种方式\n\n```objective-c\n// 方式1：传字符串数组\ntextPickerView.dataSourceArr = @[@\"大专以下\", @\"大专\", @\"本科\", @\"硕士\", @\"博士\", @\"博士后\"];\n```\n\n```objective-c\n// 方式2：直接传入 plist 文件名（可以将上面的字符串数组放到本地plist文件中，如：education_data.plist）\ntextPickerView.fileName = @\"education_data.plist\";\n```\n\n```objective-c\n// 方式3：传入一维模型数组(NSArray \u003cBRTextModel *\u003e*)\nNSArray *dataArr = @[@{@\"code\": @\"1\", @\"text\": @\"大专以下\"},\n                     @{@\"code\": @\"2\", @\"text\": @\"大专\"},\n                     @{@\"code\": @\"3\", @\"text\": @\"本科\"},\n                     @{@\"code\": @\"4\", @\"text\": @\"硕士\"},\n                     @{@\"code\": @\"5\", @\"text\": @\"博士\"},\n                     @{@\"code\": @\"6\", @\"text\": @\"博士后\"}];\n// 将上面数组 转为 模型数组（组件内封装的工具方法）\nNSArray\u003cBRTextModel *\u003e *modelArr = [NSArray br_modelArrayWithJson:dataArr mapper:nil];\ntextPickerView.dataSourceArr = modelArr;\n```\n\n说明：当字典key 与 BRTextModel模型的属性不匹配时，需要指定模型属性与字典key的映射关系\n\n```objective-c\n/// 单列文本选择器\nBRTextPickerView *textPickerView = [[BRTextPickerView alloc]initWithPickerMode:BRTextPickerComponentSingle];\ntextPickerView.title = @\"融资情况\";\n// 方式3：传入一维模型数组(NSArray \u003cBRTextModel *\u003e*)\nNSArray *dataArr = @[@{@\"key\": @\"1001\", @\"value\": @\"无融资\", @\"remark\": @\"\"},\n                     @{@\"key\": @\"2001\", @\"value\": @\"天使轮\", @\"remark\": @\"\"},\n                     @{@\"key\": @\"3001\", @\"value\": @\"A轮\", @\"remark\": @\"\"},\n                     @{@\"key\": @\"4001\", @\"value\": @\"B轮\", @\"remark\": @\"\"},\n                     @{@\"key\": @\"5001\", @\"value\": @\"C轮以后\", @\"remark\": @\"\"},\n                     @{@\"key\": @\"6001\", @\"value\": @\"已上市\", @\"remark\": @\"\"}];\n// 指定 BRTextModel模型的属性 与 字典key 的映射关系\nNSDictionary *mapper = @{ @\"code\": @\"key\", @\"text\": @\"value\", @\"extras\": @\"remark\" };\n// 将上面数组 转为 模型数组（组件内封装的工具方法）\nNSArray\u003cBRTextModel *\u003e *modelArr = [NSArray br_modelArrayWithJson:dataArr mapper:mapper];\ntextPickerView.dataSourceArr = modelArr;\ntextPickerView.singleResultBlock = ^(BRTextModel * _Nullable model, NSInteger index) {\n  \tNSLog(@\"选择的值：%@\", model.text);\n};\n[textPickerView show];\n```\n\n- 单列文本选择器效果图：\n\n| ![自定义单列字符串](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/text_single_xueli.png?raw=true) | ![融资情况](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/text_single_rongzi.png?raw=true) |\n| :----------------------------------------------------------: | :----------------------------------------------------------: |\n\n\n\n#### 2. 多列文本选择器\n\n- 使用示例：\n\n```objective-c\n/// 多列文本选择器\nBRTextPickerView *textPickerView = [[BRTextPickerView alloc]initWithPickerMode:BRTextPickerComponentMulti];\ntextPickerView.title = @\"多列文本选择器\";\n// 设置数据源\ntextPickerView.dataSourceArr = @[@[@\"语文\", @\"数学\", @\"英语\"], @[@\"优秀\", @\"良好\"]];\ntextPickerView.selectIndexs = self.mySelectIndexs;\ntextPickerView.multiResultBlock = ^(NSArray\u003cBRTextModel *\u003e * _Nullable models, NSArray\u003cNSNumber *\u003e * _Nullable indexs) {\n\t\tself.mySelectIndexs = indexs;\n    // 将模型数组元素的 text 属性值，通过分隔符-连接成字符串（组件内封装的工具方法）\n    NSString *selectText = [models br_joinText:@\"-\"];\n    NSLog(@\"选择的结果：%@\", selectText);\n};\n[textPickerView show];\n```\n\n- 多列文本选择器设置数据源同单列一样，也有3种方式：\n\n```objective-c\n// 方式1：多维字符串数组\ntextPickerView.dataSourceArr = @[@[@\"语文\", @\"数学\", @\"英语\"], @[@\"优秀\", @\"良好\"]];\n```\n\n```objective-c\n// 方式2：直接传入 plist 文件名（可以将上面的数组放到本地plist文件中，如：grade_level_data.plist）\ntextPickerView.fileName = @\"grade_level_data.plist\";\n```\n\n```objective-c\n// 方式3：传入多维模型数组\nNSArray *subjectDataArr = @[@{@\"subject_id\": @\"11\", @\"subject\": @\"语文\"}, @{@\"subject_id\": @\"12\", @\"subject\": @\"数学\"}, @{@\"subject_id\": @\"13\", @\"subject\": @\"英语\"}];\nNSArray *gradeDataArr = @[@{@\"grade_id\": @\"1\", @\"grade\": @\"优秀\"}, @{@\"grade_id\": @\"2\", @\"grade\": @\"良好\"}];\n// 将上面数组 转为 模型数组（组件内封装的工具方法）\nNSArray *subjectModelArr = [NSArray br_modelArrayWithJson:subjectDataArr mapper:@{ @\"code\": @\"subject_id\", @\"text\": @\"subject\" }];\nNSArray *gradeModelArr = [NSArray br_modelArrayWithJson:gradeDataArr mapper:@{ @\"code\": @\"grade_id\", @\"text\": @\"grade\" }];\ntextPickerView.dataSourceArr = @[subjectModelArr, gradeModelArr];\n```\n\n- 另外还可以设置更多自定义样式\n\n```objective-c\n/// 多列文本选择器\nBRTextPickerView *textPickerView = [[BRTextPickerView alloc]initWithPickerMode:BRTextPickerComponentMulti];\ntextPickerView.title = @\"自定义多列字符串\";\ntextPickerView.dataSourceArr = @[@[@\"01\", @\"02\", @\"03\", @\"04\", @\"05\", @\"06\", @\"07\", @\"08\", @\"09\", @\"10\", @\"11\", @\"12\"], @[@\"00\", @\"10\", @\"20\", @\"30\", @\"40\", @\"50\"]];\ntextPickerView.selectIndexs = self.mySelectIndexs;\ntextPickerView.multiResultBlock = ^(NSArray\u003cBRTextModel *\u003e * _Nullable models, NSArray\u003cNSNumber *\u003e * _Nullable indexs) {\n  \tself.mySelectIndexs = indexs;\n    // 将模型数组元素的 text 属性值，通过:分隔符 连接成字符串（组件内封装的工具方法）\n    NSString *selectText = [models br_joinText:@\":\"];\n    NSLog(@\"选择的结果：%@\", selectText);\n};\n\n// 设置自定义样式\nBRPickerStyle *customStyle = [[BRPickerStyle alloc]init];\n// 设置 picker 的列宽\ncustomStyle.columnWidth = 30;\n// 设置 picker 的列间隔\ncustomStyle.columnSpacing = 60;\n// 设置圆角矩形背景\n// 方式1：使用系统自带样式，保留iOS14之后系统默认的圆角样式。\ncustomStyle.clearPickerNewStyle = NO;\n// 方式2：可以使用UIView自定义一个圆角矩形视图rectView，并添加到 alertView 上也能实现同样的效果（[textPickerView.alertView addSubview:rectView];）\n// 设置选择器中间选中行的样式\ncustomStyle.selectRowTextFont = [UIFont boldSystemFontOfSize:20.0f];\ncustomStyle.selectRowTextColor = [UIColor blueColor];\ntextPickerView.pickerStyle = customStyle;\n\n[textPickerView show];\n```\n\n- 多列文本选择器效果图：\n\n| ![多列文本选择器](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/text_multi_grade.png?raw=true) | ![多列文本选择器](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/text_multi_time.png?raw=true) |\n| :----------------------------------------------------------: | :----------------------------------------------------------: |\n\n\n\n#### 3. 多列联动文本选择器\n\n- 使用示例：\n\n```objective-c\n/// 多列联动文本选择器\nBRTextPickerView *textPickerView = [[BRTextPickerView alloc]initWithPickerMode:BRTextPickerComponentCascade];\ntextPickerView.title = @\"多列联动文本选择器\";\nNSArray *dataArr = @[\n    @{\n        @\"text\" : @\"浙江省\",\n        @\"children\" : @[\n            @{ @\"text\": @\"杭州市\", @\"children\": @[@{ @\"text\": @\"西湖区\" }, @{ @\"text\": @\"滨江区\" }] },\n            @{ @\"text\": @\"宁波市\", @\"children\": @[@{ @\"text\": @\"海曙区\" }, @{ @\"text\": @\"江北区\" }] },\n            @{ @\"text\": @\"温州市\", @\"children\": @[@{ @\"text\": @\"鹿城区\" }, @{ @\"text\": @\"龙湾区\" }] }\n      ]\n    },\n    @{\n        @\"text\" : @\"江苏省\",\n        @\"children\" : @[\n            @{ @\"text\": @\"南京市\", @\"children\": @[@{ @\"text\": @\"玄武区\" }, @{ @\"text\": @\"秦淮区\" }] },\n            @{ @\"text\": @\"苏州市\", @\"children\": @[@{ @\"text\": @\"虎丘区\" }, @{ @\"text\": @\"吴中区\" }] }\n      ]\n    },\n    @{\n        @\"text\" : @\"辽宁省\",\n        @\"children\" : @[\n            @{ @\"text\": @\"沈阳市\", @\"children\": @[@{ @\"text\": @\"沈河区\" }, @{ @\"text\": @\"和平区\" }] },\n            @{ @\"text\": @\"大连市\", @\"children\": @[@{ @\"text\": @\"中山区\" }, @{ @\"text\": @\"金州区\" }] }\n      ]\n    }\n];\n// 设置数据源：传树状结构模型数组(NSArray \u003cBRTextModel *\u003e*)\ntextPickerView.dataSourceArr = [NSArray br_modelArrayWithJson:dataArr mapper:nil];\ntextPickerView.selectIndexs = self.mySelectIndexs;\ntextPickerView.multiResultBlock = ^(NSArray\u003cBRTextModel *\u003e * _Nullable models, NSArray\u003cNSNumber *\u003e * _Nullable indexs) {\n    self.mySelectIndexs = indexs;\n  \t// 将模型数组元素的 text 属性值，通过-分隔符 连接成字符串（组件内封装的工具方法）\n    NSString *selectText = [models br_joinText:@\"-\"];\n    NSLog(@\"选择的结果：%@\", selectText);\n};\n[textPickerView show];\n```\n\n\n\n- 实现省、市、区/县选择（使用本地数据源：region_tree_data.json）\n\n```objective-c\n// 地区\nBRTextPickerView *textPickerView = [[BRTextPickerView alloc]initWithPickerMode:BRTextPickerComponentCascade];\ntextPickerView.title = @\"请选择地区\";\n// 设置数据源：传入本地json文件名（可以下载Demo中的 region_tree_data.json 文件放到自己的项目中，该数据源来源于高德地图最新数据）\ntextPickerView.fileName = @\"region_tree_data.json\";\n// 设置选择器显示的列数(即层级数)，默认是根据数据源层级动态计算显示。如：设置1则只显示前1列数据（即只显示省）；设置2则只显示前2列数据（即只显示省、市）；设置3则只显示前3列数据（即显示省、市、区）\ntextPickerView.showColumnNum = 3;\ntextPickerView.selectIndexs = self.addressSelectIndexs;\ntextPickerView.multiResultBlock = ^(NSArray\u003cBRTextModel *\u003e * _Nullable models, NSArray\u003cNSNumber *\u003e * _Nullable indexs) {\n    self.addressSelectIndexs = indexs;\n    // 将模型数组元素的 text 属性值，通过-分隔符 连接成字符串（组件内封装的工具方法）\n    NSString *selectText = [models br_joinText:@\"-\"];\n    NSLog(@\"选择的结果：%@\", selectText);\n    textField.text = selectText;\n};\n[textPickerView show];\n```\n\n- 地址文本选择器的3种显示效果\n\n| ![地区](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/text_cascade_area.png?raw=true) | ![城市](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/text_cascade_city.png?raw=true) |\n| ------------------------------------------------------------ | ------------------------------------------------------------ |\n| 样式1：textPickerView.showColumnNum = 3;                     | 样式2：textPickerView.showColumnNum = 2;                     |\n|                                                              |                                                              |\n| ![省份](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/text_cascade_province.png?raw=true) |                                                              |\n| 样式3：textPickerView.showColumnNum = 1;                     |                                                              |\n\n\u003e高德地图行政区划数据源（省、市、区/县），数据更新于2024年7月\n\u003e\n\u003e- 原数据：[amap_region_data.json](https://raw.githubusercontent.com/agiapp/BRPickerView/master/BRPickerViewDemo/DataFile/amap_region_data.json)\n\u003e- 处理后的树状结构数据1：[region_tree_data.json](https://raw.githubusercontent.com/agiapp/BRPickerView/master/BRPickerViewDemo/DataFile/region_tree_data.json) （组件使用本地数据源时，需要下载的文件）\n\u003e- 处理后的树状结构数据2：[region_list_data.json](https://raw.githubusercontent.com/agiapp/BRPickerView/master/BRPickerViewDemo/DataFile/region_list_data.json)\n\n\n\n- 处理树状结构数据\n\n```json\n{\n    \"status\": \"1\",\n    \"info\": \"OK\",\n    \"districts\": [\n        {\n            \"adcode\": \"330000\",\n            \"name\": \"浙江省\",\n            \"districts\" : [\n                { \"adcode\" : \"330100\", \"name\": \"杭州市\", \"districts\": [{ \"adcode\" : \"330106\", \"name\": \"西湖区\" }, { \"adcode\" : \"330108\", \"name\": \"滨江区\" }] },\n                { \"adcode\" : \"330200\", \"name\": \"宁波市\", \"districts\": [{ \"adcode\" : \"330203\", \"name\": \"海曙区\" }, { \"adcode\" : \"330205\", \"name\": \"江北区\" }] },\n                { \"adcode\" : \"330300\", \"name\": \"温州市\", \"districts\": [{ \"adcode\" : \"330302\", \"name\": \"鹿城区\" }, { \"adcode\" : \"330303\", \"name\": \"龙湾区\" }] }\n            ]\n        },\n        {\n            \"adcode\": \"320000\",\n            \"name\": \"江苏省\",\n            \"districts\" : [\n                { \"adcode\" : \"320100\", \"name\": \"南京市\", \"districts\": [{ \"adcode\" : \"320102\", \"name\": \"玄武区\" }, { \"adcode\" : \"320104\", \"name\": \"秦淮区\" }] },\n                { \"adcode\" : \"320500\", \"name\": \"苏州市\", \"districts\": [{ \"adcode\" : \"320505\", \"name\": \"虎丘区\" }, { \"adcode\" : \"320506\", \"name\": \"吴中区\" }] }\n            ]\n        },\n        {\n            \"adcode\": \"210000\",\n            \"name\": \"辽宁省\",\n            \"districts\" : [\n                { \"adcode\" : \"210100\", \"name\": \"沈阳市\", \"districts\": [{ \"adcode\" : \"210103\", \"name\": \"沈河区\" }, { \"adcode\" : \"210102\", \"name\": \"和平区\" }] },\n                { \"adcode\" : \"210200\", \"name\": \"大连市\", \"districts\": [{ \"adcode\" : \"210202\", \"name\": \"中山区\" }, { \"adcode\" : \"210213\", \"name\": \"金州区\" }] }\n            ]\n        }\n    ]\n}\n```\n\n```objective-c\n/// 多列联动文本选择器\nBRTextPickerView *textPickerView = [[BRTextPickerView alloc]initWithPickerMode:BRTextPickerComponentCascade];\ntextPickerView.title = @\"多列联动文本选择器\";\n\n// 接收网络请求结果数据（下面省略号表示省略部分代码）\nNSArray *dataArr = ...... responseObject[@\"districts\"];\n// 指定 BRTextModel模型的属性 与 字典key 的映射关系\nNSDictionary *mapper = @{ @\"code\": @\"adcode\", @\"text\": @\"name\", @\"children\": @\"districts\" };\n// 将上面数组 转为 模型数组（组件内封装的工具方法）\nNSArray\u003cBRTextModel *\u003e *modelArr = [NSArray br_modelArrayWithJson:dataArr mapper:mapper];\ntextPickerView.dataSourceArr = modelArr;\ntextPickerView.multiResultBlock = ^(NSArray\u003cBRTextModel *\u003e * _Nullable models, NSArray\u003cNSNumber *\u003e * _Nullable indexs) {\n    // 将模型数组元素的 text 属性值，通过-分隔符 连接成字符串（组件内封装的工具方法）\n  \tNSString *selectText = [models br_joinText:@\"-\"];\n    NSLog(@\"选择的结果：%@\", selectText);\n};\n[textPickerView show];\n```\n\n- 处理扁平结构数据\n\n```json\n{\n  \"Code\" : 200,\n  \"Msg\" : \"获取成功\",\n  \"Result\" : [\n      {\n        \"ParentID\" : \"-1\",\n        \"ParentName\" : \"\",\n        \"CategoryID\" : \"330000\",\n        \"CategoryName\" : \"浙江省\"\n      },\n      {\n        \"ParentID\" : \"-1\",\n        \"ParentName\" : \"\",\n        \"CategoryID\" : \"320000\",\n        \"CategoryName\" : \"江苏省\"\n      },\n      {\n        \"ParentID\" : \"-1\",\n        \"ParentName\" : \"\",\n        \"CategoryID\" : \"210000\",\n        \"CategoryName\" : \"辽宁省\"\n      },\n      {\n        \"ParentID\" : \"330000\",\n        \"ParentName\" : \"浙江省\",\n        \"CategoryID\" : \"330100\",\n        \"CategoryName\" : \"杭州市\"\n      },\n      {\n        \"ParentID\" : \"330000\",\n        \"ParentName\" : \"浙江省\",\n        \"CategoryID\" : \"330200\",\n        \"CategoryName\" : \"宁波市\"\n      },\n      {\n        \"ParentID\" : \"330000\",\n        \"ParentName\" : \"浙江省\",\n        \"CategoryID\" : \"330300\",\n        \"CategoryName\" : \"温州市\"\n      },\n      {\n        \"ParentID\" : \"320000\",\n        \"ParentName\" : \"江苏省\",\n        \"CategoryID\" : \"320100\",\n        \"CategoryName\" : \"南京市\"\n      },\n      {\n        \"ParentID\" : \"320000\",\n        \"ParentName\" : \"江苏省\",\n        \"CategoryID\" : \"320500\",\n        \"CategoryName\" : \"苏州市\"\n      },\n      {\n        \"ParentID\" : \"210000\",\n        \"ParentName\" : \"辽宁省\",\n        \"CategoryID\" : \"210100\",\n        \"CategoryName\" : \"沈阳市\"\n      },\n      {\n        \"ParentID\" : \"210000\",\n        \"ParentName\" : \"辽宁省\",\n        \"CategoryID\" : \"210200\",\n        \"CategoryName\" : \"大连市\"\n      }\n  ]\n}\n```\n\n```objective-c\n/// 多列联动文本选择器\nBRTextPickerView *textPickerView = [[BRTextPickerView alloc]initWithPickerMode:BRTextPickerComponentCascade];\ntextPickerView.title = @\"多列联动文本选择器\";\n\n// 接收网络请求结果数据（下面省略号表示省略部分代码）\nNSArray *dataArr = ...... responseObject[@\"Result\"];\n// 指定 BRTextModel模型的属性 与 字典key 的映射关系\nNSDictionary *mapper = @{ @\"parentCode\": @\"ParentID\", @\"code\": @\"CategoryID\", @\"text\": @\"CategoryName\" };\n// 1.先将上面数组 转为 模型数组（组件内封装的工具方法）。如果数据源是多个数组，需要自己先手动组装成一个NSArray\u003cBRTextModel *\u003e类型的扁平结构模型数组。\nNSArray\u003cBRTextModel *\u003e *listModelArr = [NSArray br_modelArrayWithJson:dataArr mapper:mapper];\n// 2.将扁平结构模型数组 转成 树状结构模型数组（组件内封装的工具方法）\nNSArray\u003cBRTextModel *\u003e *treeModelArr = [listModelArr br_buildTreeArray];\ntextPickerView.dataSourceArr = treeModelArr;\n\ntextPickerView.multiResultBlock = ^(NSArray\u003cBRTextModel *\u003e * _Nullable models, NSArray\u003cNSNumber *\u003e * _Nullable indexs) {\n    // 将模型数组元素的 text 属性值，通过-分隔符 连接成字符串（组件内封装的工具方法）\n  \tNSString *selectText = [models br_joinText:@\"-\"];\n    NSLog(@\"选择的结果：%@\", selectText);\n    // 获取选择模型指定属性（如：code）组成的数组（组件内封装的工具方法）\n    NSArray *selectIDs = [models br_getValueArr:@\"code\"];\n};\n\n// 设置选择器中间选中行的样式\nBRPickerStyle *customStyle = [[BRPickerStyle alloc]init];\ncustomStyle.selectRowTextFont = [UIFont boldSystemFontOfSize:20.0f];\ncustomStyle.selectRowTextColor = [UIColor blueColor];\ncustomStyle.columnWidth = 80;\ncustomStyle.columnSpacing = 10;\ntextPickerView.pickerStyle = customStyle;\n\n[textPickerView show];\n```\n\n- 多列联动文本选择器效果图：\n\n| ![三列联动文本选择器](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/text_cascade_three.png?raw=true) | ![两列字符串选择器](https://github.com/agiapp/BRPickerView/blob/master/BRPickerViewDemo/images/text_cascade_two.png?raw=true) |\n| :----------------------------------------------------------: | :----------------------------------------------------------: |\n\n\n\n补充说明：对于一些需要特殊定制弹框的应用场景，可以使用下面的方法把日期选择器/文本选择器到指定容器视图上，实现个性化的弹框需求。\n\n```objective-c\n/// 扩展一：添加选择器到指定容器视图上\n/// 应用场景：可将中间的滚轮选择器 pickerView 视图（不包含蒙层及标题栏）添加到任何自定义视图上（会自动填满容器视图），也方便自定义更多的弹框样式\n/// 补充说明：如果是自定义确定按钮，需要回调默认选择的值：只需在自定义确定按钮的点击事件方法里执行一下 doneBlock 回调（目的是去触发组件内部执行 resultBlock 回调，进而回调默认选择的值）\n/// @param view 容器视图\n- (void)addPickerToView:(nullable UIView *)view;\n```\n\n\n\n# 更新记录\n\n#### 2025-04-22（V2.9.5）\n\n- fix：[#319](https://github.com/agiapp/BRPickerView/issues/319) 、[#326](https://github.com/agiapp/BRPickerView/issues/326) 、[#340](https://github.com/agiapp/BRPickerView/issues/340) \n\n#### 2025-03-16（V2.9.3）\n\n- [#336](https://github.com/agiapp/BRPickerView/issues/336) ：优化选择年月日时分秒时，UI显示最后一个秒显示不全问题\n\n#### 2024-07-24（V2.9.1）\n\n- 新增 maxTextLines 属性\n- 取消 selectRowAnimated 属性 readonly 限制\n\n#### 2024-07-17（V2.9.0）\n\n- 新增 BRTextPickerView 文本选择组件（用于替代BRAddressPickerView、BRStringPickerView组件）\n\n#### 2024-07-02（V2.8.8）\n\n- [#310](https://github.com/agiapp/BRPickerView/issues/310) ：更新本地省市区数据源数据\n\n- [#314](https://github.com/agiapp/BRPickerView/issues/314) ：修改maskView视图命名，解决因命名冲突在iOS 18 上出现的崩溃问题\n\n#### 2024-05-28（V2.8.7）\n\n- 解决已知问题：[#308](https://github.com/agiapp/BRPickerView/issues/308) 、[#309](https://github.com/agiapp/BRPickerView/issues/309) \n- 时间选择器新增 `twelveHourMode` 属性，支持设置12小时制\n- 支持 Swift Package Manager\n\n#### 2024-04-28（V2.8.5）\n\n- 解决已知问题：[#305](https://github.com/agiapp/BRPickerView/issues/305) \n- 添加可设置选择器组件的列宽属性：`columnWidth`\n- 添加可设置`BRStringPickerView` 选择器组件的列间隔属性：`columnSpacing`\n\n#### 2024-04-23（V2.8.2）\n\n- 解决已知问题：[#304](https://github.com/agiapp/BRPickerView/issues/304) \n\n- Add PrivacyInfo.xcprivacy\n\n#### 2022-07-08（V2.8.0）\n\n- 优化代码。\n\n#### 2022-06-16（V2.7.8）\n\n- 优化代码。\n\n#### 2022-03-30（V2.7.7）\n\n- 优化代码。\n\n#### 2021-10-09（V2.7.6）\n\n- 适配iOS15\n\n#### 2021-05-28（V2.7.5）\n\n- 日期选择器新增属性：`monthNames` 和 `customUnit`\n\n- 解决已知问题：[#232](https://github.com/agiapp/BRPickerView/issues/232) 、[#231](https://github.com/agiapp/BRPickerView/issues/231)  、[#230](https://github.com/agiapp/BRPickerView/issues/230)  、[#227](https://github.com/agiapp/BRPickerView/issues/227)  、[#225](https://github.com/agiapp/BRPickerView/issues/225) 、[#219](https://github.com/agiapp/BRPickerView/issues/219) 、[#206](https://github.com/agiapp/BRPickerView/issues/206) \n\n#### 2020-09-25（V2.7.3）\n\n- 适配选择器iOS14的样式：[#189](https://github.com/agiapp/BRPickerView/issues/189) 、[#191](https://github.com/agiapp/BRPickerView/issues/191)\n\n#### 2020-09-23（V2.7.2）\n\n- 日期选择器新增添加自定义字符串属性：`firstRowContent` 和 `lastRowContent`\n- 解决日期选择器设置最小日期时，存在的联动不正确的问题：[#184](https://github.com/agiapp/BRPickerView/issues/184) \n\n#### 2020-08-28（V2.7.0）\n\n- 日期选择器添加 `nonSelectableDates` 属性：[#178](https://github.com/agiapp/BRPickerView/issues/178) \n- 优化选中行文本显示：[#177](https://github.com/agiapp/BRPickerView/issues/177) \n\n#### 2020-08-16（V2.6.8）\n\n- 优化代码，适配 iPad 分屏显示\n- 新增 `keyView` 属性（即组件的父视图：可以将组件添加到 自己获取的 keyWindow 上，或页面的 view 上）\n\n#### 2020-08-09（V2.6.7）\n\n- 适配 iOS14\n\n#### 2020-08-06（V2.6.6）\n\n- 修复 [#163](https://github.com/agiapp/BRPickerView/issues/163) 和  [#170](https://github.com/agiapp/BRPickerView/issues/170) \n\n#### 2020-07-18（V2.6.5）\n\n- 字符串选择器新增支持多级联动选择\n\n#### 2020-06-24（V2.6.3）\n\n- 日期选择器新增属性：`timeZone` 和 `addCustomString`\n\n#### 2020-05-12（V2.6.2）\n\n- 实现 [#145](#145) 和  [#146](#146) 需求\n\n#### 2020-04-30（V2.6.0）\n\n- 新增样式属性：`selectRowTextColor` 和 `selectRowTextFont`\n- 日期选择器新增数字显示属性：`numberFullName`\n- 优化代码，添加 `BRDatePickerModeYMD` 支持国际化英式日期\n\n- 修复 [#143](#143)\n\n#### 2020-04-27（V2.5.8）\n\n- 修复 [#138](https://github.com/agiapp/BRPickerView/issues/138) 和 [#142](https://github.com/agiapp/BRPickerView/issues/142)\n- 日期选择器新增 `descending` 属性，支持降序的时间列表\n- 更新地址选择器地区数据源\n\n#### 2020-03-31（V2.5.7）\n\n- 优化代码，解决已知问题\n\n#### 2020-02-26（V2.5.6）\n\n- 优化代码，兼容部分国际化日期样式\n\n#### 2020-02-24（V2.5.5）\n\n- 添加设置选择器选中行背景颜色的功能，新增属性 `selectRowColor`\n\n#### 2020-01-31（V2.5.3）\n\n- 新增属性：`pickerHeaderView`、`pickerFooterView`\n- 新增刷新选择器数据方法：`reloadData`\n\n#### 2020-01-05（V2.5.1）\n\n- 优化代码，添加 `BRDatePickerModeYM` 支持国际化英式日期\n\n#### 2020-01-02（V2.5.0）\n\n- 日期选择器新增属性：`showUnitType`（日期单位显示样式）、`minuteInterval`、`secondInterval`\n- 封装了常用的几种模板样式，使用更加简单便捷\n- 框架内默认适配深色模式显示\n\n#### 2019-12-26（V2.4.6）\n\n- 添加支持动态更新属性 `title` 、 `selectDate`、`pickerMode` 的值\n- 日期选择器添加 `showWeek` 属性，及新增 `BRDatePickerModeMS` 日期类型\n- 优化选择器【用法二】的使用，新增选择器滚动选择时回调的属性\n\n#### 2019-11-28（V2.4.5）\n\n- 日期选择器新增选择 ”至今“ 和 显示 ”今天“ 的功能，见以下两个属性：\n\n  `showToday` ：控制是否显示 “今天” ，默认为 NO\n\n  `addToNow`：控制是否添加选择 “至今”，默认为 NO\n\n#### 2019-11-26（V2.4.3）\n\n- 日期选择器新增以下三种选择类型：\n\n  `BRDatePickerModeYMDHMS`（年月日时分秒）、`BRDatePickerModeYMDE`（年月日星期）、`BRDatePickerModeHMS`（时分秒）\n\n- 更新地址选择器地区数据源\n\n#### 2019-11-07（V2.4.2）\n\n- 日期选择器添加：BRDatePickerModeYMDH（yyyy-MM-dd HH）类型\n- 地址选择器添加：selectIndexs 属性，可根据索引去设置默认选择\n- 适配横屏及刘海屏安全区域显示效果\n\n#### 2019-11-04（V2.4.0）\n\n- 优化选择器子目录管理，方便轻量级、模块化集成\n\n  `pod 'BRPickerView'`\t// 集成全部的功能\n\n  `pod 'BRPickerView/DatePickerView'`\t// 仅集成日期选择器的功能\n\n  `pod 'BRPickerView/AddressPickerView'`\t// 仅集成地址选择器的功能\n\n  `pod 'BRPickerView/StringPickerView'`\t// 仅集成字符串选择器的功能\n\n#### 2019-11-01（V2.3.8）\n\n- 优化代码，添加更多的自定义样式属性\n\n#### 2019-10-30（V2.3.6）\n\n- 优化代码，添加国际化支持\n\n#### 2019-10-26（V2.3.5）\n\n- 添加传统的创建对象设置属性的使用方式\n- 开放设置选择器颜色及样式，适配深色模式\n- 更新省市区数据源，数据与政府官网最新公布的一致（参见：[行政区划代码](http://www.mca.gov.cn/article/sj/xzqh/2019/)）\n- 支持将选择器添加到指定容器视图上（见BaseView.h文件，扩展一方法）\n- 支持将子视图添加到选择器上（见BaseView.h文件，扩展二方法）\n- 优化代码，配置Pod库的层级目录\n\n#### 2018-04-27（V2.2.1）:\n\n- 修复bug，适配iPad和横屏显示。\n- 优化代码，提高框架适应性，降低内存消耗。\n\n#### 2018-04-03（V2.2.0）\n\n- 时间选择器新添加了7种显示类型（BRDatePickerMode），可根据自己项目的需求选择性使用。\n- 适配横屏，及 iPhoneX 底部安全区域。\n- 修改了最小时间和最大时间的参数名称（以前版本是传 NSString 类型， 现在传 NSDate 类型）\n- 修复比较时间大小时出现的bug。\n\n#### 2018-03-19（V2.1.3）\n\n- 修改地址选择器确认选择后的回调参数。\n- 现修改如下：可通过省市区的模型获取省市区的 name（名称）、code（id）、index（索引）`resultBlock:^(BRProvinceModel *province, BRCityModel *city, BRAreaModel *area) {}`\n- 去掉第三方依赖库 `MJExtension` ，修改为手动解析地址数据源。\n\n#### 2018-03-11（V2.1.2）\n\n- 重命名了Github用户名，更新项目相关的路径。（提示：pod之前的版本不受影响）\n\n#### 2018-02-28（V2.1.1）\n\n- 修复某些情况下无法用bundle加载本地数据源（BRCity.plist）bug。\n\n#### 2018-01-26（V2.1.0）\n\n- 给地址选择器添加了一个方法（见方法4），提供数据源参数，支持外部传入地区数据源。\n- 提示：要注意数据源格式，参考 BRCity.json。可以把 BRCity.json 文件的内容放到后台去维护，通过后台接口获取地区数据源（即 BRCity.json 文件的内容）。\n\n#### 2018-01-25（V2.0.0）\n\n- 更新了地址数据源（BRCity.plist），地区信息是2018年最新最全的，与微信的地区信息完全一致。\n- 支持自定义默认选择地址（格式：@[@\"浙江省\", @\"杭州市\", @\"西湖区\"]），支持下次点击进入地址选择器时，默认地址为上次选择的结果。\n- 修改了日期选择器、地址选择器、字符串选择器的接口方法（删除了之前的方法2）。\n- 添加了地址选择器显示类型，支持3种显示：只显示省份、显示省份和城市、显示省市区。\n\n#### 2018-01-05（V1.3.0）\n\n- 添加取消选择的回调方法（点击背景或取消按钮会执行 `cancelBlock` ）\n- 合并了字符串选择器 数组数据源和plist数据源对应的方法，`dataSource` 参数支持两种类型：\n\n#### 2018-01-02（V1.2.0）\n\n- 添加支持自定义主题颜色的方法。\n\n#### 2017-11-26（V1.1.0）\n\n- 更换第三方依赖库。\n- 用MJExtension 替换了 原来的YYModel，以前没有注意导入YYModel，同时又导入YYKit会导致重复导入而冲突（另外使用YYModel时，手动导入和pod导入 其中的头文件和方法名也不一样，所以很容易出错）。\n\n#### 2017-11-16（V1.0.0）\n\n- 初始版本！\n\n# 许可证\n\nBRPickerView 使用 MIT 许可证，详情见 LICENSE 文件。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagiapp%2Fbrpickerview","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fagiapp%2Fbrpickerview","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagiapp%2Fbrpickerview/lists"}