两步搞定索引

2016-08-26  本文已影响47人  远处那片海

索引看似复杂,其实是个很简单的东西,可以说是tableView本身自带的技能,只需要我们把他的任督二脉打通就行了。

实现索引只需要两步:

  1. 创建索引的数据源
  2. 实现代理方法

废话不多说,直接上代码,代码中有解释

#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
上一篇下一篇

猜你喜欢

热点阅读