自定义TableviewIndex (右边索引)
最近接到一个需求,要求在列表上添加一个索引,不仅仅如此,还要每个索引很久以前微信那样,每个字母有背景颜色,比如这个样子的。
这个功能就很强大了,感谢这个效果的作者给了我极大的帮助,所以在分享我的代码之前,先献上这个效果的开源代码SCIndexView。
当我下载完这个代码之后,我第一个感觉就是效果很炫,但是美中不足的是,耦合度比较高,而且使用很多遍历,对于代码设计和性能做的不是很好,但是也都无伤大雅。于是我决定重新封装一个,这里要分享一下我个人,对于控件封装的几个原则:
一,尽量不影响业务工程师原有代码,如果一定要影响,那么影响最好降到最低。
二,尽量不要把superview传入subview中,以免引起循环持有。
三,尽量减少使用逻辑判断,而使用对象的多态性来执行不同方法。
四,尽量不要让model和view产生关联,我不希望我自己写的代码,拎出去就是一坨,这样很不利于再次修改和使用,要把功能性代码的耦合度降到最低。
当然,我写的代码也存在许许多多的问题,也希望有人可以提出指正,我们一起用代码改变世界。
接下来,我介绍一下我的实现方式,感兴趣的朋友可以去github下载。DDTableviewIndex
这个方法同样也是在类目中实现的,如果对默认效果满意,只需要在我们的vc中引入类目的头文件,只需要多加一行代码,只需要实现之前唤醒索引的代理方法即可,方便快捷。如果真的觉得颜色不那么让人满意,当然,不废话,添加方法如下:
- DDIndexViewMode *mode = [[DDIndexViewMode alloc]initMakeIndexviewModel:^(DDIndexViewModel *make) {
- make.indexColor = [UIColor blackColor];
- make.indexBackgroundColor = [UIColor whiteColor];
- make.selectedColor = [UIColor whiteColor];
- make.selectedBackgroundColor = [UIColor blackColor];
- }];
- [self.tableView addIndexViewStyleWithMode:mode];
此处mode可以传nil,为默认黑白样式。
效果如下:
这里我借鉴了masory的使用方法,因为我觉得这样写方法的可选参数,自由度会比较好,设置好之后,调用tableview类目对外的方法即可,还算好用吧。
欢迎大家提出问题,共同写出更好的代码!