Latest | 0.1 |
---|---|
Homepage | https://github.com/yixianxueqi/YHTAddressPicker |
License | MIT |
Platforms | ios 8.0, requires ARC |
Frameworks | UIKit |
Authors |
这是一个简单的地址选择器,支持pickerView和tableView两种方式选择。
效果
使用
YHTAddressPickerViewController *addressVC = [[YHTAddressPickerViewController alloc] init];
[addressVC showType:YHTShowType_Picker parentController:self completion:^(NSDictionary *dic) {
NSLog(@"address picker %@", dic);
}];
控制展现方式:
typedef NS_ENUM(NSUInteger, YHTShowType) {
YHTShowType_Picker = 0,
YHTShowType_Table
};
数据源:
本控件自带有一份省市区的plist文件,所以存在一个默认实现了协议的数据源类YHTAddressDefaultDataSource,控制器初始化时默认使用了该类作为数据源代理, 若用户需要更改数据源,
只需更改其代理对象dateSource即可。
代理对象需要满足YHTAddressDataSource协议
@required
/**
获取省份列表根据国家
@param mdoel 国家(可为nil, 默认中国)
@param listBlock 获取列表回调
*/
- (void)getProvinceByCountry:(YHTAddressModel *)mdoel list:(YHTAddressListBlock)listBlock;
/**
获取城市列表根据省份
@param model 省份
@param listBlock 获取列表回调
*/
- (void)getCityByProvince:(YHTAddressModel *)model list:(YHTAddressListBlock)listBlock;
/**
获取区域列表根据城市
@param model 城市
@param listBlock 获取列表回调
*/
- (void)getRegionByCity:(YHTAddressModel *)model list:(YHTAddressListBlock)listBlock;
用户实现该协议,并在协议方法内通过block将数据回传给控件。
此处不需要担心异步导致的数据错乱问题,控件内部对异步已经做了序列化处理,保证展示的总是最新的数据。
关于模型问题,已经定义了YHTAddressModel这样一个模型,包含了编码和名字属性,若用户属性与此有差异,可能需要你做一个适配器以便将你的模型转化为控件所需要的模型。(注:差异过大,可以以源码形式导入,然后适当修改模型。)
注意:
关于UI:
该控件底部弹出picker选择器时,不论是否存在tabbar都可以正常展示,若视图底部存在显示不完整或留白,请检查父控制器的以下属性:
self.automaticallyAdjustsScrollViewInsets = false;
self.edgesForExtendedLayout = UIRectEdgeNone;
关于数据正确性:
在使用picker进行数据选择时,有一种情况需要注意,可能会导致选择的数据错误结果。
例: 当用户在滑动省份时(惯性滑动,还没有明确选择时),点击确定按钮获取地址选择结果时,由于控件是在pickerView:didSelectRow:inComponent:代理方法被唤起时,才去刷新其余需要刷新的列,而在此种情况,该代理方法还没有被唤起执行,直到它减速将要停止时才明确是哪一行被选取,才能据此刷新。因此,其余列使用的还是滑动前的默认数据,这时获得的结果是个紊乱的结果。开发人员需要谨慎去处理此特殊情况(一般正常操作不会出现,但需要提防这种充满恶意的操作),可以在结果获取后校验是否合法。
安装
- 将addressPicker文件夹拖入项目使用
- cocopods安装
pod 'YHTAddressPicker', '0.1'
Latest podspec
{ "name": "YHTAddressPicker", "version": "0.1", "summary": "A simple and convenience YHTAddressPicker.", "homepage": "https://github.com/yixianxueqi/YHTAddressPicker", "license": { "type": "MIT", "file": "LICENSE" }, "authors": { "CatLogic": "[email protected]" }, "platforms": { "ios": "8.0" }, "source": { "git": "https://github.com/yixianxueqi/YHTAddressPicker.git", "tag": "0.1" }, "source_files": "YHTAddressPicker/addressPicker/*.{h,m}", "resources": "YHTAddressPicker/addressPicker/cityArea.plist", "frameworks": "UIKit", "requires_arc": true }
Wed, 14 Jun 2017 12:00:04 +0000