简单实现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

时间: 2024-10-11 13:31:18

简单实现UITableView索引功能(中英文首字母索引) ByH罗的相关文章

微信小程序通讯录首字母索引效果,车辆品牌选择列表

效果图: wxml代码: <block wx:for="{{list}}"> <view class='letter' id="letter{{index}}">{{index}}</view> <view class='item' wx:for="{{item}}" wx:for-item="idx"> {{idx.name}} </view> </block

iOS开发——UI_swift篇&amp;UITableView实现索引功能

UITableView实现索引功能 像iOS中的通讯录,通过点击联系人表格右侧的字母索引,我们可以快速定位到以该字母为首字母的联系人分组. 要实现索引,我们只需要两步操作: (1)实现索引数据源代理方法 (2)响应点击索引触发的代理事件 效果图如下: 代码如下: 1 import UIKit 2 3 class ViewController: UIViewController , UITableViewDelegate, UITableViewDataSource{ 4 5 var tableV

Swift - 给表格UITableView添加索引功能(快速定位)

像iOS中的通讯录,通过点击联系人表格右侧的字母索引,我们可以快速定位到以该字母为首字母的联系人分组. 要实现索引,我们只需要两步操作: (1)实现索引数据源代理方法 (2)响应点击索引触发的代理事件 效果图如下: 代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 4

构建了一个简单的时间序列数据集来说明索引功能

数据索引和选取 pandas对象中的轴标签信息有很多作用: 使用已知指示来确定数据(即提供元数据),这对于分析.可视化以及交互式控制台的显示都十分重要 使能够实现自动和显式的数据对齐 允许直观地获取和设置数据集的子集 在这一部分,我们将致力于最终的目的:即如何切片,切丁以及一般地获取和设置pandas对象的子集.文章将主要集中在Series和DataFrame上,因为它们潜力很大.希望未来在高维数据结构(包括panel)上投入更多的精力,尤其是在基于标签的高级索引方面. 提示:Python和bu

简单测试--C#实现中文汉字转拼音首字母

第一种: 这个是自己写的比较简单的实现方法,要做汉字转拼音首字母,首先应该有一个存储首字母的数组,然后将要转拼音码的汉字与每个首字母开头的第一个汉字即"最小"的汉字作比较,这里的最小指的是按拼音规则比较最小,例如a比h小,所以"爱"比"恨"小,同一个字母开头的拼音比较大小以此类推.最后实现的结果是只转汉字,对于中文特殊字符.标点符号和英文都原样输出,不转码. 实现方法如下: 1 using System; 2 using System.Colle

一起写框架-Ioc内核容器的实现-基础功能-容器对象名默认首字母小写(八)

实现功能 --前面实现的代码-- 默认的对象名就类名.不符合Java的命名规范.我们希望默认的对象名首字母小写. 实现思路 创建一个命名规则的帮助类.实现将对大写开头的对象名修改为小写开头. 实现步骤 1.创建一个命名规则帮助类 1 package ioc.core.utils; 2 3 /** 4 * 创建命名规则帮助类 5 * 6 * @author ranger 7 * 8 */ 9 public class NamingUtils { 10 /** 11 * 将类名修改为对象名,首字母小

Libreoffice:禁止首字母自动大写功能

 造冰箱的大熊猫@cnblogs 2019/1/24 在LibreOffice(5.1.6.2)中,要禁止或者使能首字母自动大写功能,点击菜单项“Tools>>AutoCorrect Options”,激活“AutoCorrect”对话框.在对话框的“Options”标签下,“Capitalize first letter of every sentence”选项控制首字母自动大写功能. 原文地址:https://www.cnblogs.com/pandabang/p/10317561.htm

首字母筛选内容的功能

关于首字母筛选内容的功能: namespace App\Communal; // author: rianley class Word_to_letter{ public function groupByInitials(array $data, $targetKey = 'name') { $data = array_map(function ($item) use ($targetKey) { return array_merge($item, [ 'initials' => $this->

一个简单的汉字搜索匹配示例(支持拼音、首字母简写)

在社交应用中,很多场景下需要用到搜索,以微信的搜索通讯录为例.好友自己有昵称,我们可能给他/她备注一个昵称,在输入:拼间.首字母.原文时都应该能匹配到(匹配优先是备注然后才是原来的昵称).这里以'芈月传'为例,'芈'不是常见字,所以输入:myz或者miyuezhuan或者芈月传,都应该能匹配到'芈月传'这个结果.当然不一定需要全部写完,比如输入:my的时候就应该能匹配到'芈月传'了.针对多音字的话,可能会麻烦一些,不过也可以解决(在下面的例子之上再进行扩展即可),一般场景下单音已经解决90%以上