BRAddressPickerView.m 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543
  1. //
  2. // BRAddressPickerView.m
  3. // BRPickerViewDemo
  4. //
  5. // Created by renbo on 2017/8/11.
  6. // Copyright © 2017 irenb. All rights reserved.
  7. //
  8. // 最新代码下载地址:https://github.com/91renb/BRPickerView
  9. #import "BRAddressPickerView.h"
  10. #import "NSBundle+BRPickerView.h"
  11. @interface BRAddressPickerView ()<UIPickerViewDataSource, UIPickerViewDelegate>
  12. // 地址选择器
  13. @property (nonatomic, strong) UIPickerView *pickerView;
  14. // 省模型数组
  15. @property(nonatomic, copy) NSArray *provinceModelArr;
  16. // 市模型数组
  17. @property(nonatomic, copy) NSArray *cityModelArr;
  18. // 区模型数组
  19. @property(nonatomic, copy) NSArray *areaModelArr;
  20. // 选中的省
  21. @property(nonatomic, strong) BRProvinceModel *selectProvinceModel;
  22. // 选中的市
  23. @property(nonatomic, strong) BRCityModel *selectCityModel;
  24. // 选中的区
  25. @property(nonatomic, strong) BRAreaModel *selectAreaModel;
  26. // 记录省选中的位置
  27. @property(nonatomic, assign) NSInteger provinceIndex;
  28. // 记录市选中的位置
  29. @property(nonatomic, assign) NSInteger cityIndex;
  30. // 记录区选中的位置
  31. @property(nonatomic, assign) NSInteger areaIndex;
  32. @property (nonatomic, copy) NSArray <NSString *>* mSelectValues;
  33. @end
  34. @implementation BRAddressPickerView
  35. #pragma mark - 1.显示地址选择器
  36. + (void)showAddressPickerWithSelectIndexs:(NSArray <NSNumber *>*)selectIndexs
  37. resultBlock:(BRAddressResultBlock)resultBlock {
  38. [self showAddressPickerWithMode:BRAddressPickerModeArea dataSource:nil selectIndexs:selectIndexs isAutoSelect:NO resultBlock:resultBlock];
  39. }
  40. #pragma mark - 2.显示地址选择器
  41. + (void)showAddressPickerWithMode:(BRAddressPickerMode)mode
  42. selectIndexs:(NSArray <NSNumber *>*)selectIndexs
  43. isAutoSelect:(BOOL)isAutoSelect
  44. resultBlock:(BRAddressResultBlock)resultBlock {
  45. [self showAddressPickerWithMode:mode dataSource:nil selectIndexs:selectIndexs isAutoSelect:isAutoSelect resultBlock:resultBlock];
  46. }
  47. #pragma mark - 3.显示地址选择器
  48. + (void)showAddressPickerWithMode:(BRAddressPickerMode)mode
  49. dataSource:(NSArray *)dataSource
  50. selectIndexs:(NSArray <NSNumber *>*)selectIndexs
  51. isAutoSelect:(BOOL)isAutoSelect
  52. resultBlock:(BRAddressResultBlock)resultBlock {
  53. // 创建地址选择器
  54. BRAddressPickerView *addressPickerView = [[BRAddressPickerView alloc] initWithPickerMode:mode];
  55. addressPickerView.dataSourceArr = dataSource;
  56. addressPickerView.selectIndexs = selectIndexs;
  57. addressPickerView.isAutoSelect = isAutoSelect;
  58. addressPickerView.resultBlock = resultBlock;
  59. // 显示
  60. [addressPickerView show];
  61. }
  62. #pragma mark - 初始化地址选择器
  63. - (instancetype)initWithPickerMode:(BRAddressPickerMode)pickerMode {
  64. if (self = [super init]) {
  65. self.pickerMode = pickerMode;
  66. }
  67. return self;
  68. }
  69. #pragma mark - 处理选择器数据
  70. - (void)handlerPickerData {
  71. if (self.dataSourceArr && self.dataSourceArr.count > 0) {
  72. id item = [self.dataSourceArr firstObject];
  73. // 如果传的值是解析好的模型数组
  74. if ([item isKindOfClass:[BRProvinceModel class]]) {
  75. self.provinceModelArr = self.dataSourceArr;
  76. } else {
  77. self.provinceModelArr = [self getProvinceModelArr:self.dataSourceArr];
  78. }
  79. } else {
  80. // 如果外部没有传入地区数据源,就使用本地的数据源
  81. NSArray *dataSource = [NSBundle br_addressJsonArray];
  82. if (!dataSource || dataSource.count == 0) {
  83. return;
  84. }
  85. self.dataSourceArr = dataSource;
  86. self.provinceModelArr = [self getProvinceModelArr:self.dataSourceArr];
  87. }
  88. // 设置默认值
  89. [self handlerDefaultSelectValue];
  90. }
  91. #pragma mark - 获取模型数组
  92. - (NSArray <BRProvinceModel *>*)getProvinceModelArr:(NSArray *)dataSourceArr {
  93. NSMutableArray *tempArr1 = [NSMutableArray array];
  94. for (NSDictionary *proviceDic in dataSourceArr) {
  95. BRProvinceModel *proviceModel = [[BRProvinceModel alloc]init];
  96. proviceModel.code = [proviceDic objectForKey:@"code"];
  97. proviceModel.name = [proviceDic objectForKey:@"name"];
  98. proviceModel.index = [dataSourceArr indexOfObject:proviceDic];
  99. NSArray *cityList = [proviceDic.allKeys containsObject:@"cityList"] ? [proviceDic objectForKey:@"cityList"] : [proviceDic objectForKey:@"citylist"];
  100. NSMutableArray *tempArr2 = [NSMutableArray array];
  101. for (NSDictionary *cityDic in cityList) {
  102. BRCityModel *cityModel = [[BRCityModel alloc]init];
  103. cityModel.code = [cityDic objectForKey:@"code"];
  104. cityModel.name = [cityDic objectForKey:@"name"];
  105. cityModel.index = [cityList indexOfObject:cityDic];
  106. NSArray *areaList = [cityDic.allKeys containsObject:@"areaList"] ? [cityDic objectForKey:@"areaList"] : [cityDic objectForKey:@"arealist"];
  107. NSMutableArray *tempArr3 = [NSMutableArray array];
  108. for (NSDictionary *areaDic in areaList) {
  109. BRAreaModel *areaModel = [[BRAreaModel alloc]init];
  110. areaModel.code = [areaDic objectForKey:@"code"];
  111. areaModel.name = [areaDic objectForKey:@"name"];
  112. areaModel.index = [areaList indexOfObject:areaDic];
  113. [tempArr3 addObject:areaModel];
  114. }
  115. cityModel.arealist = [tempArr3 copy];
  116. [tempArr2 addObject:cityModel];
  117. }
  118. proviceModel.citylist = [tempArr2 copy];
  119. [tempArr1 addObject:proviceModel];
  120. }
  121. return [tempArr1 copy];
  122. }
  123. #pragma mark - 设置默认选择的值
  124. - (void)handlerDefaultSelectValue {
  125. __block NSString *selectProvinceName = nil;
  126. __block NSString *selectCityName = nil;
  127. __block NSString *selectAreaName = nil;
  128. if (self.mSelectValues.count > 0) {
  129. selectProvinceName = self.mSelectValues.count > 0 ? self.mSelectValues[0] : nil;
  130. selectCityName = self.mSelectValues.count > 1 ? self.mSelectValues[1] : nil;
  131. selectAreaName = self.mSelectValues.count > 2 ? self.mSelectValues[2] : nil;
  132. }
  133. __weak typeof(self) weakSelf = self;
  134. if (self.pickerMode == BRAddressPickerModeProvince || self.pickerMode == BRAddressPickerModeCity || self.pickerMode == BRAddressPickerModeArea) {
  135. if (self.selectIndexs.count > 0) {
  136. NSInteger provinceIndex = [self.selectIndexs[0] integerValue];
  137. self.provinceIndex = (provinceIndex > 0 && provinceIndex < self.provinceModelArr.count) ? provinceIndex : 0;
  138. self.selectProvinceModel = self.provinceModelArr.count > self.provinceIndex ? self.provinceModelArr[self.provinceIndex] : nil;
  139. } else {
  140. self.provinceIndex = 0;
  141. self.selectProvinceModel = self.provinceModelArr.count > 0 ? self.provinceModelArr[0] : nil;
  142. [self.provinceModelArr enumerateObjectsUsingBlock:^(BRProvinceModel * _Nonnull model, NSUInteger idx, BOOL * _Nonnull stop) {
  143. if (selectProvinceName && [model.name isEqualToString:selectProvinceName]) {
  144. weakSelf.provinceIndex = idx;
  145. weakSelf.selectProvinceModel = model;
  146. *stop = YES;
  147. }
  148. }];
  149. }
  150. }
  151. if (self.pickerMode == BRAddressPickerModeCity || self.pickerMode == BRAddressPickerModeArea) {
  152. self.cityModelArr = [self getCityModelArray:self.provinceIndex];
  153. if (self.selectIndexs.count > 0) {
  154. NSInteger cityIndex = self.selectIndexs.count > 1 ? [self.selectIndexs[1] integerValue] : 0;
  155. self.cityIndex = (cityIndex > 0 && cityIndex < self.cityModelArr.count) ? cityIndex : 0;
  156. self.selectCityModel = self.cityModelArr.count > self.cityIndex ? self.cityModelArr[self.cityIndex] : nil;
  157. } else {
  158. self.cityIndex = 0;
  159. self.selectCityModel = self.cityModelArr.count > 0 ? self.cityModelArr[0] : nil;
  160. [self.cityModelArr enumerateObjectsUsingBlock:^(BRCityModel * _Nonnull model, NSUInteger idx, BOOL * _Nonnull stop) {
  161. if (selectCityName && [model.name isEqualToString:selectCityName]) {
  162. weakSelf.cityIndex = idx;
  163. weakSelf.selectCityModel = model;
  164. *stop = YES;
  165. }
  166. }];
  167. }
  168. }
  169. if (self.pickerMode == BRAddressPickerModeArea) {
  170. self.areaModelArr = [self getAreaModelArray:self.provinceIndex cityIndex:self.cityIndex];
  171. if (self.selectIndexs.count > 0) {
  172. NSInteger areaIndex = self.selectIndexs.count > 2 ? [self.selectIndexs[2] integerValue] : 0;
  173. self.areaIndex = (areaIndex > 0 && areaIndex < self.areaModelArr.count) ? areaIndex : 0;
  174. self.selectAreaModel = self.areaModelArr.count > self.areaIndex ? self.areaModelArr[self.areaIndex] : nil;
  175. } else {
  176. self.areaIndex = 0;
  177. self.selectAreaModel = self.areaModelArr.count > 0 ? self.areaModelArr[0] : nil;
  178. [self.areaModelArr enumerateObjectsUsingBlock:^(BRAreaModel * _Nonnull model, NSUInteger idx, BOOL * _Nonnull stop) {
  179. if (selectAreaName && [model.name isEqualToString:selectAreaName]) {
  180. weakSelf.areaIndex = idx;
  181. weakSelf.selectAreaModel = model;
  182. *stop = YES;
  183. }
  184. }];
  185. }
  186. }
  187. }
  188. // 根据 省索引 获取 城市模型数组
  189. - (NSArray *)getCityModelArray:(NSInteger)provinceIndex {
  190. BRProvinceModel *provinceModel = self.provinceModelArr[provinceIndex];
  191. // 返回城市模型数组
  192. return provinceModel.citylist;
  193. }
  194. // 根据 省索引和城市索引 获取 区域模型数组
  195. - (NSArray *)getAreaModelArray:(NSInteger)provinceIndex cityIndex:(NSInteger)cityIndex {
  196. BRProvinceModel *provinceModel = self.provinceModelArr[provinceIndex];
  197. if (provinceModel.citylist && provinceModel.citylist.count > 0) {
  198. BRCityModel *cityModel = provinceModel.citylist[cityIndex];
  199. // 返回地区模型数组
  200. return cityModel.arealist;
  201. } else {
  202. return nil;
  203. }
  204. }
  205. #pragma mark - 地址选择器
  206. - (UIPickerView *)pickerView {
  207. if (!_pickerView) {
  208. CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0;
  209. _pickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, self.pickerStyle.titleBarHeight + pickerHeaderViewHeight, self.keyView.bounds.size.width, self.pickerStyle.pickerHeight)];
  210. _pickerView.backgroundColor = self.pickerStyle.pickerColor;
  211. _pickerView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;
  212. _pickerView.dataSource = self;
  213. _pickerView.delegate = self;
  214. }
  215. return _pickerView;
  216. }
  217. #pragma mark - UIPickerViewDataSource
  218. // 1.设置 pickerView 的列数
  219. - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
  220. switch (self.pickerMode) {
  221. case BRAddressPickerModeProvince:
  222. return 1;
  223. break;
  224. case BRAddressPickerModeCity:
  225. return 2;
  226. break;
  227. case BRAddressPickerModeArea:
  228. return 3;
  229. break;
  230. default:
  231. break;
  232. }
  233. }
  234. // 2.设置 pickerView 每列的行数
  235. - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
  236. if (component == 0) {
  237. // 返回省个数
  238. return self.provinceModelArr.count;
  239. }
  240. if (component == 1) {
  241. // 返回市个数
  242. return self.cityModelArr.count;
  243. }
  244. if (component == 2) {
  245. // 返回区个数
  246. return self.areaModelArr.count;
  247. }
  248. return 0;
  249. }
  250. #pragma mark - UIPickerViewDelegate
  251. // 3.设置 pickerView 的显示内容
  252. - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(nullable UIView *)view {
  253. // 1.自定义 row 的内容视图
  254. UILabel *label = (UILabel *)view;
  255. if (!label) {
  256. label = [[UILabel alloc]init];
  257. label.backgroundColor = [UIColor clearColor];
  258. label.textAlignment = NSTextAlignmentCenter;
  259. label.font = self.pickerStyle.pickerTextFont;
  260. label.textColor = self.pickerStyle.pickerTextColor;
  261. // 字体自适应属性
  262. label.adjustsFontSizeToFitWidth = YES;
  263. // 自适应最小字体缩放比例
  264. label.minimumScaleFactor = 0.5f;
  265. }
  266. if (component == 0) {
  267. BRProvinceModel *model = self.provinceModelArr[row];
  268. label.text = model.name;
  269. } else if (component == 1) {
  270. BRCityModel *model = self.cityModelArr[row];
  271. label.text = model.name;
  272. } else if (component == 2) {
  273. BRAreaModel *model = self.areaModelArr[row];
  274. label.text = model.name;
  275. }
  276. // 2.设置选择器中间选中行的样式
  277. [self.pickerStyle setupPickerSelectRowStyle:pickerView titleForRow:row forComponent:component];
  278. return label;
  279. }
  280. // 4.滚动 pickerView 执行的回调方法
  281. - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
  282. if (component == 0) { // 选择省
  283. // 保存选择的省份的索引
  284. self.provinceIndex = row;
  285. switch (self.pickerMode) {
  286. case BRAddressPickerModeProvince:
  287. {
  288. self.selectProvinceModel = self.provinceModelArr.count > self.provinceIndex ? self.provinceModelArr[self.provinceIndex] : nil;
  289. self.selectCityModel = nil;
  290. self.selectAreaModel = nil;
  291. }
  292. break;
  293. case BRAddressPickerModeCity:
  294. {
  295. self.cityModelArr = [self getCityModelArray:self.provinceIndex];
  296. [self.pickerView reloadComponent:1];
  297. [self.pickerView selectRow:0 inComponent:1 animated:YES];
  298. self.selectProvinceModel = self.provinceModelArr.count > self.provinceIndex ? self.provinceModelArr[self.provinceIndex] : nil;
  299. self.selectCityModel = self.cityModelArr.count > 0 ? self.cityModelArr[0] : nil;
  300. self.selectAreaModel = nil;
  301. }
  302. break;
  303. case BRAddressPickerModeArea:
  304. {
  305. self.cityModelArr = [self getCityModelArray:self.provinceIndex];
  306. self.areaModelArr = [self getAreaModelArray:self.provinceIndex cityIndex:0];
  307. [self.pickerView reloadComponent:1];
  308. [self.pickerView selectRow:0 inComponent:1 animated:YES];
  309. [self.pickerView reloadComponent:2];
  310. [self.pickerView selectRow:0 inComponent:2 animated:YES];
  311. self.selectProvinceModel = self.provinceModelArr.count > self.provinceIndex ? self.provinceModelArr[self.provinceIndex] : nil;
  312. self.selectCityModel = self.cityModelArr.count > 0 ? self.cityModelArr[0] : nil;
  313. self.selectAreaModel = self.areaModelArr.count > 0 ? self.areaModelArr[0] : nil;
  314. }
  315. break;
  316. default:
  317. break;
  318. }
  319. }
  320. if (component == 1) { // 选择市
  321. // 保存选择的城市的索引
  322. self.cityIndex = row;
  323. switch (self.pickerMode) {
  324. case BRAddressPickerModeCity:
  325. {
  326. self.selectCityModel = self.cityModelArr.count > self.cityIndex ? self.cityModelArr[self.cityIndex] : nil;
  327. self.selectAreaModel = nil;
  328. }
  329. break;
  330. case BRAddressPickerModeArea:
  331. {
  332. self.areaModelArr = [self getAreaModelArray:self.provinceIndex cityIndex:self.cityIndex];
  333. [self.pickerView reloadComponent:2];
  334. [self.pickerView selectRow:0 inComponent:2 animated:YES];
  335. self.selectCityModel = self.cityModelArr.count > self.cityIndex ? self.cityModelArr[self.cityIndex] : nil;
  336. self.selectAreaModel = self.areaModelArr.count > 0 ? self.areaModelArr[0] : nil;
  337. }
  338. break;
  339. default:
  340. break;
  341. }
  342. }
  343. if (component == 2) { // 选择区
  344. // 保存选择的地区的索引
  345. self.areaIndex = row;
  346. if (self.pickerMode == BRAddressPickerModeArea) {
  347. self.selectAreaModel = self.areaModelArr.count > self.areaIndex ? self.areaModelArr[self.areaIndex] : nil;
  348. }
  349. }
  350. // 滚动选择时执行 changeBlock
  351. if (self.changeBlock) {
  352. self.changeBlock(self.selectProvinceModel, self.selectCityModel, self.selectAreaModel);
  353. }
  354. // 设置自动选择时,滚动选择时就执行 resultBlock
  355. if (self.isAutoSelect) {
  356. if (self.resultBlock) {
  357. self.resultBlock(self.selectProvinceModel, self.selectCityModel, self.selectAreaModel);
  358. }
  359. }
  360. }
  361. // 设置行高
  362. - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component {
  363. return self.pickerStyle.rowHeight;
  364. }
  365. #pragma mark - 重写父类方法
  366. - (void)reloadData {
  367. // 1.处理数据源
  368. [self handlerPickerData];
  369. // 2.刷新选择器
  370. [self.pickerView reloadAllComponents];
  371. // 3.滚动到选择的地区
  372. if (self.pickerMode == BRAddressPickerModeProvince) {
  373. [self.pickerView selectRow:self.provinceIndex inComponent:0 animated:YES];
  374. } else if (self.pickerMode == BRAddressPickerModeCity) {
  375. [self.pickerView selectRow:self.provinceIndex inComponent:0 animated:YES];
  376. [self.pickerView selectRow:self.cityIndex inComponent:1 animated:YES];
  377. } else if (self.pickerMode == BRAddressPickerModeArea) {
  378. [self.pickerView selectRow:self.provinceIndex inComponent:0 animated:YES];
  379. [self.pickerView selectRow:self.cityIndex inComponent:1 animated:YES];
  380. [self.pickerView selectRow:self.areaIndex inComponent:2 animated:YES];
  381. }
  382. }
  383. - (void)addPickerToView:(UIView *)view {
  384. // 1.添加地址选择器
  385. if (view) {
  386. // 立即刷新容器视图 view 的布局(防止 view 使用自动布局时,选择器视图无法正常显示)
  387. [view setNeedsLayout];
  388. [view layoutIfNeeded];
  389. self.frame = view.bounds;
  390. CGFloat pickerHeaderViewHeight = self.pickerHeaderView ? self.pickerHeaderView.bounds.size.height : 0;
  391. CGFloat pickerFooterViewHeight = self.pickerFooterView ? self.pickerFooterView.bounds.size.height : 0;
  392. self.pickerView.frame = CGRectMake(0, pickerHeaderViewHeight, view.bounds.size.width, view.bounds.size.height - pickerHeaderViewHeight - pickerFooterViewHeight);
  393. [self addSubview:self.pickerView];
  394. } else {
  395. [self.alertView addSubview:self.pickerView];
  396. }
  397. // ③添加中间选择行的两条分割线
  398. if (self.pickerStyle.clearPickerNewStyle) {
  399. [self.pickerStyle addSeparatorLineView:self.pickerView];
  400. }
  401. // 2.绑定数据
  402. [self reloadData];
  403. __weak typeof(self) weakSelf = self;
  404. self.doneBlock = ^{
  405. // 点击确定按钮后,执行block回调
  406. [weakSelf removePickerFromView:view];
  407. if (weakSelf.resultBlock) {
  408. weakSelf.resultBlock(weakSelf.selectProvinceModel, weakSelf.selectCityModel, weakSelf.selectAreaModel);
  409. }
  410. };
  411. [super addPickerToView:view];
  412. }
  413. #pragma mark - 重写父类方法
  414. - (void)addSubViewToPicker:(UIView *)customView {
  415. [self.pickerView addSubview:customView];
  416. }
  417. #pragma mark - 弹出选择器视图
  418. - (void)show {
  419. [self addPickerToView:nil];
  420. }
  421. #pragma mark - 关闭选择器视图
  422. - (void)dismiss {
  423. [self removePickerFromView:nil];
  424. }
  425. #pragma mark - setter方法
  426. - (void)setSelectValues:(NSArray<NSString *> *)selectValues {
  427. self.mSelectValues = selectValues;
  428. }
  429. #pragma mark - getter方法
  430. - (NSArray *)provinceModelArr {
  431. if (!_provinceModelArr) {
  432. _provinceModelArr = [NSArray array];
  433. }
  434. return _provinceModelArr;
  435. }
  436. - (NSArray *)cityModelArr {
  437. if (!_cityModelArr) {
  438. _cityModelArr = [NSArray array];
  439. }
  440. return _cityModelArr;
  441. }
  442. - (NSArray *)areaModelArr {
  443. if (!_areaModelArr) {
  444. _areaModelArr = [NSArray array];
  445. }
  446. return _areaModelArr;
  447. }
  448. - (BRProvinceModel *)selectProvinceModel {
  449. if (!_selectProvinceModel) {
  450. _selectProvinceModel = [[BRProvinceModel alloc]init];
  451. }
  452. return _selectProvinceModel;
  453. }
  454. - (BRCityModel *)selectCityModel {
  455. if (!_selectCityModel) {
  456. _selectCityModel = [[BRCityModel alloc]init];
  457. _selectCityModel.code = @"";
  458. _selectCityModel.name = @"";
  459. }
  460. return _selectCityModel;
  461. }
  462. - (BRAreaModel *)selectAreaModel {
  463. if (!_selectAreaModel) {
  464. _selectAreaModel = [[BRAreaModel alloc]init];
  465. _selectAreaModel.code = @"";
  466. _selectAreaModel.name = @"";
  467. }
  468. return _selectAreaModel;
  469. }
  470. - (NSArray *)dataSourceArr {
  471. if (!_dataSourceArr) {
  472. _dataSourceArr = [NSArray array];
  473. }
  474. return _dataSourceArr;
  475. }
  476. - (NSArray<NSString *> *)mSelectValues {
  477. if (!_mSelectValues) {
  478. _mSelectValues = [NSArray array];
  479. }
  480. return _mSelectValues;
  481. }
  482. - (NSArray<NSNumber *> *)selectIndexs {
  483. if (!_selectIndexs) {
  484. _selectIndexs = [NSArray array];
  485. }
  486. return _selectIndexs;
  487. }
  488. @end