tableview索引功能实现(UILocalizedIndexedCollation)

最近项目组件功能界面要求,需要实现tableview索引功能,查找了些开发文档资料,发现ios技术有UILocalizedIndexedCollation能实现我的这个功能,所以这里做个笔记,记录下实现方式。大概实现界面如下:


看到这种页面我们首先想到的肯定是使用tableview的UITableViewStyleGrouped的类型实现,初始化表格。接下来我们得设置sectionheader的高度,我这里设置的是25像素。sectionfooter的话我们不用,所以一般我们不显示,高度设置为0。不过这里有个ios自己的坑,就是你设置了header的具体高度,footer高度你设置为0的话,实际显示出来footer的高度会和header一样。。这个大家可以注意下,这里有个解决方案就是footer的高度设置为很小的小数点就好了,这样footer就能达到我们不显示的目的了,设置高度的代码如下:

接下里就是UILocalizedIndexedCollation的使用,这个类提供了两个属性sectionTitles和sectionIndexTitles,分别用来提供表格中section的标题和表格右边索引显示 的数据。

// Provides the list of section titles used to group results (e.g. A-Z,# in US/English)

@property(nonatomic,readonly)NSArray * sectionTitles;

// Provides the list of index titles used to quickly jump to particular sections

@property(nonatomic,readonly)NSArray *sectionIndexTitles;

我们先将UILocalizedIndexedCollation初始化

UILocalizedIndexedCollation *collation = [UILocalizedIndexedCollation currentCollation];

这是一个单例,初始化后collation的属性sectionTitles会根据不同国家的语言初得出不同的结果。如中文和英文的得到的就是A~Z和#,日语的就是A~Z,あ, か, さ, た, な, は, ま, や, ら, わ和#。我们就是以中文为例。

接下里我们客户端就可以对数据根据这些索引key进行分组归类了,我们把收藏内容对象的title属性作为归类到依据

得到排序分组好的数据数组后是包含所有26个字母的数组,我们大部分情况下没有数据的字母索引是不希望它显示出来的,所以接下来我们要把数组里面多余的空数组移除掉。

其中涉及到的几个主要datasource方法用来展示表格右边的索引:

到这里为止,差不多基本的索引功能就基本完成了,欢迎大家提出建议和优化交流。

你可能感兴趣的:(tableview索引功能实现(UILocalizedIndexedCollation))