实际上UITableView默认就支持象电话本那样的按首字母索引。 更多关于tableView数据的展示,参考UITableViewDataSource。
实现sectionIndexTitlesForTableView 和 sectionForSectionIndexTitle 这两个接口即可。 细节请参考UITableViewDataSource帮助文档。
//
// AZViewController.m
// AZTableView--索引
//
// Created by AndrewZhang on 14-12-13.
// Copyright (c) 2014年 AndrewZhang. All rights reserved.
//
#import "AZViewController.h"
@interface AZViewController ()
@property (nonatomic,strong)NSArray *charArray;
@end
@implementation AZViewController
-(NSArray *)charArray
{
if (!_charArray) {
NSMutableArray *tempArray=[NSMutableArray arrayWithCapacity:26];
for(char c = 'A';c<='Z';c++)
{
[tempArray addObject:[NSString stringWithFormat:@"%c",c]];
}
_charArray=[tempArray copy];
}
return _charArray;
}
- (void)viewDidLoad
{
[super viewDidLoad];
UITableView *tableView=[[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
tableView.dataSource=self;
tableView.delegate=self;
[self.view addSubview:tableView];
}
//隐藏状态栏
-(BOOL)prefersStatusBarHidden
{
return YES;
}
//返回每一组的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (section % 2 ==0 )
{
return 3;
}else
{
return 4;
}
}
//创建cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
switch (indexPath.section) {
case 0:
{
switch (indexPath.row)
{
case 0:cell.textLabel.text=@"啊";break;
case 1:cell.textLabel.text=@"昂啊";break;
case 2:cell.textLabel.text=@"嗷嗷嗷";break;
default:cell.textLabel.text=@"AA";break;
}
}
break;
case 1:
{
switch (indexPath.row)
{
case 0:cell.textLabel.text=@"啊";break;
case 1:cell.textLabel.text=@"昂啊";break;
case 2:cell.textLabel.text=@"嗷嗷嗷";break;
default:cell.textLabel.text=@"BB";break;
}
}
break;
case 2:
{
switch (indexPath.row)
{
case 0:cell.textLabel.text=@"吧";break;
case 1:cell.textLabel.text=@"宝宝";break;
case 2:cell.textLabel.text=@"不不不";break;
default:cell.textLabel.text=@"BB";break;
}
}
break;
case 3:
{
switch (indexPath.row)
{
case 0:cell.textLabel.text=@"才";break;
case 1:cell.textLabel.text=@"出差";break;
case 2:cell.textLabel.text=@"擦擦擦";break;
default:cell.textLabel.text=@"CC";break;
}
}
break;
case 4:
{
switch (indexPath.row)
{
case 0:cell.textLabel.text=@"的";break;
case 1:cell.textLabel.text=@"弟弟";break;
case 2:cell.textLabel.text=@"对对对";break;
default:cell.textLabel.text=@"DD";break;
}
}
break;
case 5:
{
switch (indexPath.row)
{
case 0:cell.textLabel.text=@"额";break;
case 1:cell.textLabel.text=@"额额";break;
case 2:cell.textLabel.text=@"呃呃呃";break;
default:cell.textLabel.text=@"EE";break;
}
}
break;
case 6:
{
switch (indexPath.row)
{
case 0:cell.textLabel.text=@"飞";break;
case 1:cell.textLabel.text=@"飞飞";break;
case 2:cell.textLabel.text=@"凤飞飞";break;
default:cell.textLabel.text=@"FF";break;
}
}
break;
case 7:
{
switch (indexPath.row)
{
case 0:cell.textLabel.text=@"个";break;
case 1:cell.textLabel.text=@"刚刚";break;
case 2:cell.textLabel.text=@"嘎嘎嘎";break;
default:cell.textLabel.text=@"GG";break;
}
}
break;
case 8:
{
switch (indexPath.row)
{
case 0:cell.textLabel.text=@"好";break;
case 1:cell.textLabel.text=@"好好";break;
case 2:cell.textLabel.text=@"哈哈哈";break;
default:cell.textLabel.text=@"HH";break;
}
}
break;
case 9:
{
switch (indexPath.row)
{
case 0:cell.textLabel.text=@"i";break;
case 1:cell.textLabel.text=@"II";break;
case 2:cell.textLabel.text=@"嗷嗷嗷";break;
default:cell.textLabel.text=@"II";break;
}
}
break;
case 10:
{
switch (indexPath.row)
{
case 0:cell.textLabel.text=@"J";break;
case 1:cell.textLabel.text=@"JJ";break;
case 2:cell.textLabel.text=@"JJJ";break;
default:cell.textLabel.text=@"JJ";break;
}
}
break;
default:cell.textLabel.text=@"other";
break;
}
return cell;
}
//有多少组,默认是1组
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return self.charArray.count;
}
//设置每组的标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
if (self.charArray.count==0) {
return @"";
}
return self.charArray[section];
}
//设置在右边显示索引的标题,例如:ABCDEFG
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
return self.charArray;
}
//选中索引标题时,跳转到第几组
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
NSInteger count=0;
for (NSString *charTer in self.charArray) {
if ([charTer isEqualToString:title]) {
return count;
}
count++;
}
return 0;
}
@end