自定义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类目对外的方法即可,还算好用吧。

  欢迎大家提出问题,共同写出更好的代码!

posted @ 2019-01-30 18:25  徐栋  阅读(1880)  评论(0编辑  收藏  举报