利用tableView分組實現省份各個城市的分組,利用首字母作為索引
- (void)viewDidLoad {
[superviewDidLoad];
[self_loadData];
[self_initSubView];
}
#pragma mark - 載入資料
- (void)_loadData{
//1 讀取資料
NSString * path=[[NSBundlemainBundle]pathForResource:@"cities.plist"ofType:nil];
NSDictionary * dic=[NSDictionarydictionaryWithContentsOfFile:path];
//2 封裝省份和首字母
NSArray * prov=dic[@"provinces"];
for(NSString * strin prov){
JRProvince * pro=[JRProvincegetProWithName:str];
[self.provinceaddObject:pro];
}
//3 封裝地市
self.cities=dic[@"cities"];
}
- (void)_initSubView{
UITableView * tableView=[[UITableViewalloc]initWithFrame:CGRectMake(0, 20,
tableView.delegate=self;
tableView.dataSource=self;
tableView.sectionFooterHeight=0;//設定尾部高度為0
self.tableView=tableView;
[self.viewaddSubview:tableView];
}
#pragma mark - UITableViewDataSource
//返回行數
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
//由省份計算每個省份的地市個數
JRProvince * pro=self.province[section];
NSArray * temArray=self.cities[pro.name];
return temArray.count;
}
//返回分組的數量
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
returnself.province.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString * identy=@"myTable";
UITableViewCell * cell=[tableViewdequeueReusableCellWithIdentifier:identy ];
if(cell==nil){
cell=[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:identy];
cell.selectionStyle=UITableViewCellSelectionStyleDefault;
}
//根據省份獲取城市列表,並且根據索引返回對應城市
JRProvince * pro=self.province[indexPath.section];
NSArray * temArray=self.cities[pro.name];
cell.textLabel.text=temArray[indexPath.row];
return cell;
}
//返回分組標題
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
JRProvince * pro=self.province[section];
return pro.name;
}
//返回分組索引
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{
//迴圈遍歷省份的陣列,返回對應首字母作為索引
NSMutableArray * indexArray=[NSMutableArrayarray];
for(JRProvince * proinself.province){
//防止重複新增
if(![indexArraycontainsObject:[NSStringstringWithFormat:@"%c",pro.pinyin]]){
[indexArray addObject:[NSStringstringWithFormat:@"%c",pro.pinyin]];
}
}
return indexArray;
}
#pragma mark * 由於重複未新增的索引指向--第一次新增的首字母
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index{
int tem=0;
for(JRProvince * proinself.province){
if(pro.pinyin==[titlecharacterAtIndex:0]){
break;
}
tem++;
}
return tem;
}
#pragma mark * 選中cell,跳轉到cell組名在最頂端
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSIndexPath * index=[NSIndexPathindexPathForRow:0 inSection:indexPath.section];
[self.tableViewscrollToRowAtIndexPath:index atScrollPosition:UITableViewScrollPositionTopanimated:YES];
}
//返回城市列表的首字母
+ (JRProvince * )getProWithName:(NSString * )name{
JRProvince * pro=[[JRProvincealloc]init];
pro.name=name;
//由於該工具類不能識別多音字,因此對重慶特殊處理
if([name isEqualToString:@"重慶"]){
pro.pinyin='C';
}else{
pro.pinyin=pinyinFirstLetter([namecharacterAtIndex:0])-32;
}
return pro;
}