- 背景
前段时间做一个小需求:用户选择地址,需要用到pickerView,于是自己就简单封装了一个。
我把选择器分成了三种类型:单列、多列不联动、多列联动。
单列和多列不联动没啥可说的,很简单。多列联动就是选择前一列,后面列的数据会相应的变化。
本次需求就是是多列联动,先选择省,然后市,最后区/县。
所以就以这个例子来说明具体的使用吧
- 具体使用
1. 安装
你可以用cocoapods来安装
pod 'YKPickerView'
2. 初始化视图
在初始化视图之前,首先我们需要数据源,巧妇难为无米之炊嘛。这里我是直接放到项目里的,你可以下载下来拖到自己项目里,当然也可以请求后台接口获得,看你们具体需求。
这里我是创建了一个属性用于保存视图,防止每次调用都要重新创建
@property (nonatomic, strong) YKPickerView *linkagePickerView;
懒加载的方式初始化
- (YKPickerView *)linkagePickerView {
if (!_linkagePickerView) {
NSString *plistStr = [[NSBundle mainBundle] pathForResource:@"areaArray" ofType:@"plist"];
NSArray *areaArray = [NSArray arrayWithContentsOfFile:plistStr];
_linkagePickerView = [[YKPickerView alloc] initWithDataArray:areaArray pickerViewStyle:YKPickerViewStyleLinkageColumn];
[_linkagePickerView setResultKeyArr:@[@"provinceName", @"cityName", @"areaName"] nextKeyArr:@[@"citylist", @"arealist"]];
_linkagePickerView.delegate = self;
}
return _linkagePickerView;
}
初始化代码有三行,第一行initWithDataArray...,这个方法需要两个参数,每个参数的具体含义和格式请参考注释,说明的很清楚了。。。
这里重点说一下第二行setResultKeyArr...
在这之前我们先看一下数据源的格式
[
{
"id": "110000",
"provinceName": "北京市",
"citylist": [
{
"id": "110100",
"arealist": [
{
"id": "110101",
"areaName": "东城区"
},
{
"id": "110102",
"areaName": "西城区"
}]
},
{}, {}]
},
{}, {}]
我们解析这个数据源,肯定是需要具体的key的,而这个方法的作用就是要你提供这些key,就像例子上的@"provinceName", @"cityName", @"areaName",获取每层数据的key。而@"citylist", @"arealist"则是获取下一层数据需要的key。这两个keyArr必须能够对应起来,否则解析不了。
另外两种style则不需这一步
第三行就很简单了,设置delegate,用于后面获取用户选择的数据
3. 展示
一句show完事
[self.linkagePickerView show];
4. 获取用户选择的数据
实现delegate即可
- (void)pickerViewComplete:(YKPickerView *)pickerView result:(NSArray *)resultArr {
NSLog(@"resultArr = %@", resultArr);
}
- (void)pickerViewCancel:(YKPickerView *)pickerView {
NSLog(@"取消选择");
}
- 其他
此pickerView的字体、颜色等样式我没有提供自定义(主要是嫌麻烦),如果你嫌丑或者需要自定义,请自行封装一下。
源码 在这里
第一次在cocoapods上传自己的库,写的不好还请见谅。。。
网友评论