JFCitySelector輕量、靈活、可自定義的三級城市選擇器

簡介

JFCitySelector最開始只是本身學習時寫的demo(請看:iOS-(仿美團)城市選擇器+自動定位+字母索引),寫的很笨重(引入了一些第三方庫,且使用sqlite來做爲數據源),當時找的城市數據也不夠齊全;一直有重寫的計劃,因懶癌晚期一直沒具體實施,直到有次偶然發現了Administrative-divisions-of-China 中華人民共和國行政區劃數據源我才下定決心去完成這個項目,最終有了如今的JFCitySelector:一個輕量、靈活、可自定義的三級城市選擇器。相對於上一個版本,使用.plist做爲數據源代替sqlite,城市名稱拼音已預先處理寫入到數據源.plist裏使用時只作讀取操做,因此會很快;不用在使用MasonryFMDB因此很輕量。git

特色

  • 漢字、拼音搜索
  • 首字母索引
  • 可自定義熱門城市
  • 可自定義最近訪問
  • 可以使用提供的UI界面,亦可用提供的數據接口本身實現UI界面。

頁面展現

屏幕快照 2019-08-01 下午2.20.22.png

項目結構

項目結構

安裝

CocoaPods安裝
  • 在 Podfile 中添加 pod 'JFCitySelector'。
  • 執行 pod install 或 pod update。
  • 導入 <JFCitySelector.h>。
手動安裝
  • 下載 JFCitySelector 文件夾內的全部內容。
  • 將 JFCitySelector 內的Classes、Resources文件夾添加(拖放)到你的工程。
  • 導入 JFCitySelector.h。 #系統要求
  • 該項目最低支持iOS 10.0

具體使用

一、 使用已有的UI JFCSTableViewController
  • 遵循JFCSTableViewControllerDelegate
  • 使用initWithConfiguration: delegate:初始化JFCSTableViewController;若直接使用 init初始化JFCSTableViewController,JFCSConfiguration則爲默認配置。
//自定義配置...
JFCSConfiguration *config = [[JFCSConfiguration alloc] init];
//關閉拼音搜索
config.isPinyinSearch = NO;
//配置熱門城市
config.popularCitiesMutableArray = [self defealtPopularCities];

JFCSTableViewController *vc = [[JFCSTableViewController alloc] initWithConfiguration:config delegate:self];
[self.navigationController pushViewController:vc animated:YES];   

#pragma mark -- JFCSTableViewControllerDelegate

- (void)viewController:(JFCSTableViewController *)viewController didSelectCity:(JFCSBaseInfoModel *)model {
    //選擇城市後...
     NSLog(@"name %@ code %zd pinyin %@ alias %@ firstLetter %@",model.name, model.code, model.pinyin, model.alias, model.firstLetter);
}

//自定義熱門城市
- (NSMutableArray <JFCSPopularCitiesModel *> *)defealtPopularCities {
    JFCSPopularCitiesModel *bjModel = [[JFCSPopularCitiesModel alloc] initWithName:@"北京" type:JFCSPopularCitiesTypeCity];
    JFCSPopularCitiesModel *shModel = [[JFCSPopularCitiesModel alloc] initWithName:@"上海" type:JFCSPopularCitiesTypeCity];
    JFCSPopularCitiesModel *gzModel = [[JFCSPopularCitiesModel alloc] initWithName:@"廣州" type:JFCSPopularCitiesTypeCity];
    JFCSPopularCitiesModel *szModel = [[JFCSPopularCitiesModel alloc] initWithName:@"深圳" type:JFCSPopularCitiesTypeCity];
    JFCSPopularCitiesModel *hzModel = [[JFCSPopularCitiesModel alloc] initWithName:@"杭州" type:JFCSPopularCitiesTypeCity];
    return [NSMutableArray arrayWithObjects:bjModel, shModel, gzModel, szModel, hzModel, nil];
}
複製代碼
二、 使用JFCSDataOpreation提供的數據接口,自建UI。
  • 使用initWithConfiguration:,傳入JFCSConfiguration實例,初始化JFCSDataOpreation
JFCSConfiguration *config = [[JFCSConfiguration alloc] init];
config.isPinyinSearch = NO;
//自定義配置...
JFCSDataOpreation *dataOpreation = [[JFCSDataOpreation alloc] initWithConfiguration:config];

[dataOpreation provinces:^(NSArray<JFCSProvince *> * _Nonnull provinces) {
    //數據源...
}];

//code...

複製代碼
三、注意
  • JFCSConfiguration的屬性popularCitiesMutableArray數組,元素必須是JFCSPopularCitiesModel類型;
  • JFCSPopularCitiesModel初始化方法:initWithName: type:,傳入的城市名稱必需要和數據源內的name對應上,由於牽扯到城市名稱所對應的code,因此在自定義城市前能夠先打印所需城市的JFCSBaseInfoModel數據;type也必須是JFCSPopularCitiesType,分別爲JFCSPopularCitiesTypeProvince(省級)、JFCSPopularCitiesTypeCity(市級)和JFCSPopularCitiesTypeArea(縣級)。

#Github 連接 JFCitySelector 輕量、靈活、可自定義的三級城市選擇器github

相關文章
相關標籤/搜索