美文网首页
两步搞定索引

两步搞定索引

作者: 远处那片海 | 来源:发表于2016-08-26 14:41 被阅读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
    

    相关文章

      网友评论

          本文标题:两步搞定索引

          本文链接:https://www.haomeiwen.com/subject/izhzsttx.html