索引看似复杂,其实是个很简单的东西,可以说是tableView本身自带的技能,只需要我们把他的任督二脉打通就行了。
实现索引只需要两步:
- 创建索引的数据源
- 实现代理方法
废话不多说,直接上代码,代码中有解释
#import "ViewController.h"
@interface ViewController () <UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, strong) UITableView *indexTableView;//要添加索引的tableView
@property (nonatomic, strong) NSMutableArray *dataSource;//索引数据源
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
[self.view addSubview:self.indexTableView];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (UITableView *)indexTableView {
if (!_indexTableView) {
_indexTableView = [[UITableView alloc] initWithFrame:self.view.frame];
_indexTableView.showsVerticalScrollIndicator = NO;
[_indexTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cellId"];
_indexTableView.delegate = self;
_indexTableView.dataSource = self;
_indexTableView.sectionIndexColor = [UIColor blueColor];//给索引个颜色看看
// _indexTableView.sectionIndexBackgroundColor
// _indexTableView.sectionIndexTrackingBackgroundColor
}
return _indexTableView;
}
- (NSMutableArray *)dataSource {
//索引数据源
if (!_dataSource) {
_dataSource = [[NSMutableArray alloc] init];
for (char c = 'A'; c < 'Z'; c++) {
NSString *zimu = [NSString stringWithFormat:@"%c",c];
[_dataSource addObject:zimu];
}
}
return _dataSource;
}
#pragma mark - 添加索引列
//索引数据源
- (NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView {
//如果有多个tableView,这里需要做判断处理,下面同理
return self.dataSource;
}
//索引列表点击事件
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
//你要跳转到哪一组?
[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:index + 4] atScrollPosition:UITableViewScrollPositionTop animated:YES];
return index + 4;
}
#pragma mark - table View//这就不多说了
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 30;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 3;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 40;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 40)];
headerView.backgroundColor = [UIColor redColor];
UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 40)];
textLabel.text = [NSString stringWithFormat:@"%ld组",section];
[headerView addSubview:textLabel];
return headerView;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 100;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellId" forIndexPath:indexPath];
cell.textLabel.text = [NSString stringWithFormat:@"%ld",indexPath.row];
return cell;
}
@end
网友评论