zoukankan      html  css  js  c++  java
  • 简单实现UITableView索引功能(中英文首字母索引)(一) ByH罗

    UITableView索引功能是常见的,主要是获取中英文的首字母并排序,系统自带获取首字母

    //系统获取首字母
    - (NSString *) pinyinFirstLetter:(NSString*)sourceString {
        NSMutableString *source = [sourceString mutableCopy];
        CFStringTransform((__bridge CFMutableStringRef)source, NULL, kCFStringTransformMandarinLatin, NO);
        CFStringTransform((__bridge CFMutableStringRef)source, NULL, kCFStringTransformStripDiacritics, NO);//这一行是去声调的
        return source;
    }

    PinYin.h文件是网上比较常用的获取中英文首字母方法,NSString+PinYin.h是别人写的获取首字母并对首字母进行字典分类的NSString Categrory,这样大大简化了ViewContorl里的代码量

    在只需一行就能获得首字母分类排序后的数组

    参考:http://rainbownight.blog.51cto.com/1336585/1368730

    //导入 #import "NSString+PinYin.h"
    //索引数组
    NSArray  *indexArray= [array arrayWithPinYinFirstLetterFormat];

    主要代码

    #import "ViewController.h"
    #import "NSString+PinYin.h"
    
    @interface ViewController ()<UITableViewDelegate,UITableViewDataSource,UISearchBarDelegate>
    
    @property(nonatomic,strong)  UITableView     *myTableView;
    @property(nonatomic,strong)  NSMutableArray  *dataArray;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        [self initDataSource];
        [self createTableView];
    }

    UI及数据源

    #pragma mark----CreatMyCustomTablevIew-----
    - (void)createTableView
    {
        self.myTableView = [[UITableView  alloc] initWithFrame:CGRectMake(0,20,self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStylePlain];
        self.myTableView.delegate = self;
        self.myTableView.dataSource = self;
        [self.myTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"REUSE_CELLID"];
        self.myTableView.contentSize=CGSizeMake(self.view.frame.size.width, self.view.frame.size.height*2);
        [self.view  addSubview:self.myTableView];
         self.myTableView.sectionIndexColor =[UIColor colorWithRed:0.10 green:0.68 blue:0.94 alpha:1.0];    self.myTableView.sectionIndexBackgroundColor=[UIColor clearColor];
        [self.myTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cellID"];
        
        UISearchBar  *mSearchBar = [[UISearchBar alloc] init];
        mSearchBar.delegate = self;
        mSearchBar.placeholder = @"搜索";
        [mSearchBar setAutocapitalizationType:UITextAutocapitalizationTypeNone];
        [mSearchBar sizeToFit];
        self.myTableView.tableHeaderView=mSearchBar;
    }
    
    - (void)initDataSource
    {
        NSArray *array = @[@"登记", @"大奔", @"周傅", @"爱德华",@"((((", @"啦文琪羊", @"   s文强", @"过段时间", @"等等", @"各个", @"宵夜**", @"***", @"贝尔",@"*而结婚*", @"返回***", @"你还", @"与非门*", @"是的", @"*模块*", @"*没做*",@"俄文", @"   *#咳嗽", @"6",@"fh",@"C罗",@"邓肯"];
       
    
       self.dataArray =[NSMutableArray arrayWithArray:indexArray];
        
        [self.myTableView reloadData];
    }

    TableView相关代理

    #pragma mark--- UITableViewDataSource and UITableViewDelegate Methods---
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return [self.dataArray count];
    }
    
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        if(section == 0)
        {
            return 1;
        }else{
            NSDictionary *dict = self.dataArray[section];
            NSMutableArray *array = dict[@"content"];
            return [array count];
        }
    }
    
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        UITableViewCell  *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID"];
        NSDictionary *dict = self.dataArray[indexPath.section];
        NSMutableArray *array = dict[@"content"];
        cell.textLabel.text = array[indexPath.row];
        cell.textLabel.textColor = [UIColor colorWithRed:0.10 green:0.68 blue:0.94 alpha:1.0];
        
        return cell;
    }
    
    - (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    {
        //自定义Header标题
        UIView* myView = [[UIView alloc] init];
        myView.backgroundColor = [UIColor colorWithRed:0.10 green:0.68 blue:0.94 alpha:0.7];
        UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 90, 22)];
        titleLabel.textColor=[UIColor whiteColor];
    
        NSString *title = self.dataArray[section][@"firstLetter"];
        titleLabel.text=title;
        [myView  addSubview:titleLabel];
        
        return myView;
    }

    TableView索引栏相关设置

    #pragma mark---tableView索引相关设置----
    //添加TableView头视图标题
    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
    {
        NSDictionary *dict = self.dataArray[section];
        NSString *title = dict[@"firstLetter"];
        return title;
    }
    
    
    //添加索引栏标题数组
    - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
    {
        NSMutableArray *resultArray =[NSMutableArray arrayWithObject:UITableViewIndexSearch];
        for (NSDictionary *dict in self.dataArray) {
            NSString *title = dict[@"firstLetter"];
            [resultArray addObject:title];
        }
        return resultArray;
    }
    
    
    //点击索引栏标题时执行
    - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
    {
        //这里是为了指定索引index对应的是哪个section的,默认的话直接返回index就好。其他需要定制的就针对性处理
        if ([title isEqualToString:UITableViewIndexSearch])
        {
            [tableView setContentOffset:CGPointZero animated:NO];//tabview移至顶部
            return NSNotFound;
        }
        else
        {
            return [[UILocalizedIndexedCollation currentCollation] sectionForSectionIndexTitleAtIndex:index] - 1; // -1 添加了搜索标识
        }
    }

    Demo 下载  http://files.cnblogs.com/files/sixindev/PinyinIndexTableview.zip

     
     
     
     
     
     
  • 相关阅读:
    多线程实际应用踩坑
    SpringBoot远程接口调用-RestTemplate使用
    Python测试Post请求
    Ubuntu基于zsh自定义设置shell主题
    github-share报错无法读取远程仓库
    JVM是如何处理异常的
    springboot之父pom操作
    php 后台json 转 js数组
    tp 外连接查询
    原生关联查询语句
  • 原文地址:https://www.cnblogs.com/sixindev/p/4504578.html
Copyright © 2011-2022 走看看