UITableView---分組 省份城市列表+ 右列索引
UITableView分組顯示省份城市列表+右側索引
例題:分組名為省份名稱,組內容為對應省份的城市名稱,點選右邊的索引,將對應的省份分組顯示到到第一行。
顯示效果如下:
對應plist檔案如下圖所示:
#import "ViewController.h"
//遵守協議
@interface ViewController () <UITableViewDelegate,UITableViewDataSource>
//UITableView
@property (nonatomic,weak)UITableView * tableView;
//資料陣列
@property (
//cities字典
@property (nonatomic,strong) NSMutableDictionary * cityDic;
@property (nonatomic,strong)NSMutableArray * cityArray;
//provinces陣列
@property (nonatomic,strong) NSMutableArray * procincesArray;
@property (nonatomic,strong) NSMutableString * proviNameStr;
//strong ---資料型別
//weak ---控制元件之類的,切換頁面後若果控制元件不顯示,釋放掉
@end
@implementation ViewController
- (void)viewDidLoad
{
[superviewDidLoad];
//載入資料
[self_loadData];
UITableView * table=[[UITableViewalloc]initWithFrame:CGRectMake(0,20, self.view.frame.size.width,self.view.frame.size.height-20)style:
table.delegate=self;
table.dataSource=self;
self.tableView=table;
table.sectionFooterHeight=0; //如果有代理的話,此行沒有效果,以代理為先
table.sectionHeaderHeight=100;
[self.viewaddSubview:table];
}
#pragma mark - 懶載入
- (NSMutableArray *)procincesArray
{
if (_procincesArray ==nil)
{
NSString * path=[[NSBundlemainBundle]pathForResource:@"cities.plist"ofType:nil];
NSMutableDictionary * dic=[NSMutableDictionarydictionaryWithContentsOfFile:path];
_procincesArray = dic[@"provinces"];
}
return_procincesArray;
}
#pragma mark - 載入資料
- (void) _loadData
{
//dataArray的內容從 plist檔案中取得
NSString * path=[[NSBundlemainBundle]pathForResource:@"cities.plist"ofType:nil];
NSMutableDictionary * dic=[NSMutableDictionarydictionaryWithContentsOfFile:path];
self.cityDic=dic[@"cities"];
self.procincesArray=dic[@"provinces"];
}
#pragma mark - UITableViewDatasource
//返回行數
- (NSInteger ) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
//NSLog(@"%@",self.procincesArray[section]); //測試程式碼
NSString * tem = self.procincesArray[section];
return ((NSArray *)(self.cityDic[tem])).count;
}
//返回cell
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString * identy=@"table";
UITableViewCell * cell=[tableViewdequeueReusableCellWithIdentifier:identy];
if (!cell)
{
cell=[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:identy];
}
NSString * path=[[NSBundlemainBundle]pathForResource:@"cities.plist"ofType:nil];
NSMutableDictionary * dic=[NSMutableDictionarydictionaryWithContentsOfFile:path];
self.proviNameStr=self.procincesArray[indexPath.section];
self.cityArray= (dic[@"cities"])[self.proviNameStr];
// NSLog(@" %@--%@",self.proviNameStr, dic[self.proviNameStr]);
// NSLog(@"%@",self.cityArray);
// NSLog(@"%li", indexPath.section);
// cell.textLabel.text=self.procincesArray[indexPath.row];
cell.textLabel.text=self.cityArray[indexPath.row];
return cell;
}
#pragma mark - 返回分組數量
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
//NSLog(@"___++++%ld",self.procincesArray.count);
returnself.procincesArray.count; //分組陣列長度
}
#pragma mark - UITableViewDelegate
//設定分組的頭標題
- (NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return self.procincesArray[section];
}
#pragma mark - 設定頭部的高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 60;
}
#pragma mark - 設定尾部的高度
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0;
}
#pragma mark - 索引列
- (NSArray *) sectionIndexTitlesForTableView:(UITableView *)tableView
{
returnself.procincesArray;
}
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
}
@end