iOS自定义TableView索引

作者: ashura_ | 来源:发表于2017-05-20 22:13 被阅读2634次

    前言

    目前项目中提出iOS默认索引,如果index个数太少,间隔太紧密。让向android靠拢。

    用法

    使用的是DeanKit
    效果

    031.gif

    引入源码

    ViewController_h_和_QDMessageNotifySettingTableViewController_m.png

    源码简介

    DSectionIndexView为索引部分

    031.png

    添加头文件

    #import "DSectionIndexItemView.h"
    #import "DSectionIndexView.h"
    

    实现协议

    索引个数

    - (NSInteger)numberOfItemViewForSectionIndexView:(DSectionIndexView *)sectionIndexView
    {
        return self.tableview.numberOfSections;
    }
    

    自定义索引ItemView

    - (DSectionIndexItemView *)sectionIndexView:(DSectionIndexView *)sectionIndexView itemViewForSection:(NSInteger)section
    {
        DSectionIndexItemView *itemView = [[DSectionIndexItemView alloc] init];
        
        itemView.titleLabel.text = [self.sections objectAtIndex:section];
        itemView.titleLabel.font = [UIFont systemFontOfSize:12];
        itemView.titleLabel.textColor = [UIColor darkGrayColor];
        itemView.titleLabel.highlightedTextColor = [UIColor redColor];
        itemView.titleLabel.shadowColor = [UIColor whiteColor];
        itemView.titleLabel.shadowOffset = CGSizeMake(0, 1);
        
        return itemView;
    }
    

    自定义callout

    - (UIView *)sectionIndexView:(DSectionIndexView *)sectionIndexView calloutViewForSection:(NSInteger)section
    {
        UILabel *label = [[UILabel alloc] init];
        
        label.frame = CGRectMake(0, 0, 80, 80);
        
        label.backgroundColor = [UIColor clearColor];
        label.textColor = [UIColor redColor];
        label.font = [UIFont boldSystemFontOfSize:36];
        label.text = [self.sections objectAtIndex:section];
        label.textAlignment = UITextAlignmentCenter;
        
        [label.layer setCornerRadius:label.frame.size.width/2];
        [label.layer setBorderColor:[UIColor lightGrayColor].CGColor];
        [label.layer setBorderWidth:3.0f];
        [label.layer setShadowColor:[UIColor blackColor].CGColor];
        [label.layer setShadowOpacity:0.8];
        [label.layer setShadowRadius:5.0];
        [label.layer setShadowOffset:CGSizeMake(2.0, 2.0)];
    
        
        return label;
    }
    

    indextitle

    - (NSString *)sectionIndexView:(DSectionIndexView *)sectionIndexView
                   titleForSection:(NSInteger)section
    {
        return [self.sections objectAtIndex:section];
    }
    

    选中某个index

    - (void)sectionIndexView:(DSectionIndexView *)sectionIndexView didSelectSection:(NSInteger)section
    {
        [self.tableview scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:section] atScrollPosition:UITableViewScrollPositionTop animated:YES];
    }
    

    设置frame

    #define kSectionIndexWidth 40.f
    #define kSectionIndexHeight 360.f
    - (void)viewWillLayoutSubviews
    {
        [super viewWillLayoutSubviews];
        _sectionIndexView.frame = CGRectMake(CGRectGetWidth(self.tableview.frame) - kSectionIndexWidth, (CGRectGetHeight(self.tableview.frame) - kSectionIndexHeight)/2, kSectionIndexWidth, kSectionIndexHeight);
        [_sectionIndexView setBackgroundViewFrame];
    }
    

    reload

    加载完数据,需要reloadindex.

    - (void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
        [self.sectionIndexView reloadItemViews];
    }
    

    Demo

    TSCustomTableViewIndexs

    相关文章

      网友评论

      • 路有点颠簸:大佬,当只有几个索引的时候每个索引的纵向距离分得太开了,能不能让他们居中显示啊
      • ZhangCc_:点击indexItem的背景色怎么设置?你这是个lable,是给lable加个imageview还是把lable换成button?
        ZhangCc_:@ZhangCc_ 太久了,忘记了哈
        litongde:你这个最后怎么处理的呢?
      • 4bc973e9926f:你好,那个显示被选中字母的视图距离边框距离 可以调节么? _sectionIndexView.calloutMargin =-100;
        这个方法好像么啥效果.

      本文标题:iOS自定义TableView索引

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