對錶視圖進行分組與分區,便於使用者對資訊的尋找。首先需要建立.plist的檔案,包含所有的資訊,便於表視圖載入過程中資料的錄入。用字典儲存,以數組的方式擷取表視圖的資料。遵循UITableViewDelegate協議實現對錶視圖的分區。
首先添加、編寫.plist檔案,寫入資料,也可匯入:
在.h檔案中添加協議,建立對象:
@interface LinViewController : UIViewController//建立表視圖的對象@property (retain, nonatomic) UITableView * mTableView;//建立字典對象@property (retain, nonatomic) NSDictionary * mDictionary;//建立數組對象@property (retain, nonatomic) NSArray * mArray;@end
在.m檔案裡添加實現的方法:
@implementation LinViewController//釋放建立的對象- (void)dealloc{ [_mTableView release]; [_mDictionary release]; [_mArray release]; [super dealloc];}//載入視圖- (void)viewDidLoad{ [super viewDidLoad]; //建立初始化表視圖 self.mTableView = [[UITableView alloc]initWithFrame:self.view.frame style:UITableViewStyleGrouped]; //設定委派物件 self.mTableView.dataSource = self; self.mTableView.delegate = self; //把表視圖載入到當前視圖中 [self.view addSubview:self.mTableView]; //擷取.plist檔案的路徑 NSString * path = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"plist"]; //初始化字典 self.mDictionary = [NSDictionary dictionaryWithContentsOfFile:path]; //初始化數組,根據字典對象擷取的資料 self.mArray = [[self.mDictionary allKeys]sortedArrayUsingSelector:@selector(compare:)]; //此處關聯的方法是相片順序顯示的方法,此時表示按字母順序排列}#pragma mark---UITableViewDataSource---------//根據數組元素擷取表視圖的行數- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return [[self.mDictionary objectForKey:[self.mArray objectAtIndex:section]]count];}//繪製每一行表- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ //設定一個靜態字串做標籤,(靜態防止局部變數多次建立,提高效率,節約記憶體) static NSString * identifer = @"identifer"; //建立一個cell對象(利用表示圖可以複用的機制) UITableViewCell * pCell = [tableView dequeueReusableCellWithIdentifier:identifer]; //如果cell為空白,就建立一個新的出來 if (nil == pCell) { pCell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifer]; } //擷取所在的地區 NSInteger section = [indexPath section]; //擷取當前表視圖行數 NSInteger row = [indexPath row]; //把數組中對應元素傳遞給視圖的文本 pCell.textLabel.text = [[self.mDictionary objectForKey:[self.mArray objectAtIndex:section]]objectAtIndex:row]; return pCell;}//顯示地區的表頭標題- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ return [self.mArray objectAtIndex:section];}//顯示地區的索引- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{ return self.mArray;}#pragma mark---UITableViewDelegate-----------//為表視圖分區- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return [self.mArray count];}- (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning];}end