1、案例介绍:具备索引功能的分节表视图,如图01
图01
2、team_dictionary.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>A组</key>
<array>
<string>A1-南非</string>
<string>A2-墨西哥</string>
<string>A3-乌拉圭</string>
<string>A4-法国</string>
</array>
<key>B组</key>
<array>
<string>B1-阿根廷</string>
<string>B2-尼日利亚</string>
<string>B3-韩国</string>
<string>B4-希腊</string>
</array>
<key>C组</key>
<array>
<string>C1-英格兰</string>
<string>C2-美国</string>
<string>C3-阿尔及利亚</string>
<string>C4-斯洛文尼亚</string>
</array>
<key>D组</key>
<array>
<string>D1-德国</string>
<string>D2-澳大利亚</string>
<string>D3-塞尔维亚</string>
<string>D4-加纳</string>
</array>
<key>E组</key>
<array>
<string>E1-荷兰</string>
<string>E2-丹麦</string>
<string>E3-日本</string>
<string>E4-喀麦隆</string>
</array>
<key>F组</key>
<array>
<string>F1-意大利</string>
<string>F2-巴拉圭</string>
<string>F3-斯洛伐克</string>
<string>F4-新西兰</string>
</array>
<key>G组</key>
<array>
<string>G1-巴西</string>
<string>G2-朝鲜</string>
<string>G3-科特迪瓦</string>
<string>G4-葡萄牙</string>
</array>
<key>H组</key>
<array>
<string>H1-西班牙</string>
<string>H2-瑞士</string>
<string>H3-洪都拉斯</string>
<string>H4-智利</string>
</array>
</dict>
</plist>
3、.h
#import <UIKit/UIKit.h>@interface CQ24ViewController : UITableViewController<UISearchBarDelegate>
// 表数据
@property (strong,nonatomic) NSDictionary *dictData;
// 表数据分组名集合
@property (strong,nonatomic) NSArray *listGroupname;@end
4、.m
#import "CQ24ViewController.h"@interface CQ24ViewController ()
@end
@implementation CQ24ViewController
- (void)viewDidLoad
{
[super viewDidLoad];NSBundle *mainBundle = [NSBundle mainBundle];
NSString *plistPath = [mainBundle pathForResource:@"team_dictionary" ofType:@"plist"];// 1、初始化表格数据dictData
self.dictData = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
// 2、初始化分组名称,排序
NSArray *tempList = [self.dictData allKeys];
self.listGroupname = [tempList sortedArrayUsingSelector:@selector(compare:)];}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}#pragma mark 返回分组数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// 1、获取分组名称
NSString *groupName = [self.listGroupname objectAtIndex:section];
// 2、将分组名称作为key,从字典中取出分组数据
NSArray *listTeams = [self.dictData objectForKey:groupName];
return [listTeams count];}
#pragma mark 填充每个节的Cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// 1、加载一个cell
static NSString *CellIdentifier = @"CellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// 2、获取选择的节
NSUInteger section = [indexPath section];
// 3、获取节名称
NSString *groupName = [self.listGroupname objectAtIndex:section];
// 4、获取节数据
NSArray *listTeams = [self.dictData objectForKey:groupName];
// 5、获取选中节中的行索引
NSUInteger row = [indexPath row];
// 6、设置cell中的text
cell.textLabel.text = [listTeams objectAtIndex:row];
return cell;
}
#pragma mark 节数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return self.listGroupname.count;
}
#pragma mark 设置节title
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
NSString *groupName = [self.listGroupname objectAtIndex:section];
return groupName;
}
#pragma mark 索引
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
// 1、存在索引的集合
NSMutableArray *listTitles = [[NSMutableArray alloc] initWithCapacity:[self.listGroupname count]];
// 2、初始化索引集合
for (NSString *item in self.listGroupname) {
NSString *title = [item substringToIndex:1];
[listTitles addObject:title];
}
return listTitles;
}@end
iOS.UIKit.15.UITableView -- Index