zoukankan      html  css  js  c++  java
  • 自定义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类目对外的方法即可,还算好用吧。

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

  • 相关阅读:
    函数和常用模块【day06】:shutil模块(四)
    函数和常用模块【day06】:time模块 (一)
    函数和常用模块【day05】:生成器并行计算(五)
    函数和常用模块【day05】:装饰器前奏(一)
    函数和常用模块【day04】:内置函数(八)
    函数和常用模块【day04】:作用域、局部和全局变量(四)
    函数和常用模块【day04】:函数的非固定参数(三)
    Python基础【day02】:元组和购物车练习的知识点
    Python基础【day02】:字符串(四)
    Python基础【day03】:入门知识拾遗(八)
  • 原文地址:https://www.cnblogs.com/xuruofan/p/10339347.html
Copyright © 2011-2022 走看看