1. 程式人生 > >UITableView---分組 省份城市列表+ 右列索引

UITableView---分組 省份城市列表+ 右列索引

UITableView分組顯示省份城市列表+右側索引

例題:分組名為省份名稱,組內容為對應省份的城市名稱,點選右邊的索引,將對應的省份分組顯示到到第一行。

顯示效果如下:


對應plist檔案如下圖所示:


#import "ViewController.h"

//遵守協議

@interface ViewController () <UITableViewDelegate,UITableViewDataSource>

//UITableView

@property (nonatomic,weak)UITableView * tableView;

//資料陣列

@property (

nonatomic,strong) NSMutableArray * dataArray;

//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:

UITableViewStyleGrouped];

    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