Giter Site home page Giter Site logo

dztableview's Introduction

通过实现一个TableView来理解IOS UI编程


欢迎关注IOSTips微信订阅号:


先说点题外话。我们在日常做和IOS的UI相关的工作的时候,有一个组件的使用频率非常高--UITabelView。于是就要求我们对UITableView的每一个函数接口,每一个属性都了如指掌,只有这样在使用UITableView的时候,我们才能游刃有余的处理各种需求。不然做出来的东西,很多时候只是功能实现了,但是程序效率和代码可维护性都比较差。举个例子,比如在tableView头部要显示一段文字。我见过的最啰嗦的解决方案是这样的:

  1. 子类化一个UIViewController
  2. 将根View设置成一个UIScrollView
  3. 把头部的Label和TableView加在ScrollView上面
  4. 开始各种调整ScrollView和TableView的delegate调用函数里面的参数,让Label能随着TableView滑动

其实如果你熟悉UITableView,那么你几句话就可以搞定

    UILabel* label = [UILabel alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), 40);
    label.text = @"就是一段文字嘛,干嘛大动干戈";
    tableVIew.tableHeaderView = label;

所谓工欲善其事必先利器,编程语言和各种库其实本质上就是工具而已。你要想用这些工具来实现产品和Leader提出的各种需求。当然,不止是功能上的实现,还包括程序效率,代码质量。特别想着重强调一下代码质量,如果你不想后面维护自己的代码就像噩梦一样,如果你不想一旦新来一个需求就得对代码大刀阔斧的伤筋动骨,如果你不想给后来者埋坑。那么最好就多注意一下。

这里的代码质量并不是简简单单的指代码写点注释了,利用Xcode提供的一些像pragam或者#warning来解释代码。《编写可阅读代码的艺术》还有其他一些编程的书籍也都说道,真正高质量的代码,是不需要注释的。一个好的代码从逻辑上和结构上都是清晰的。我看到很多很难维护的代码都是因为逻辑结构混乱,和设计模式滥用导致的程序结构紊乱。分析其原因,就会发现很多时候,是因为写代码的人对所使用的工具(主要是objc和UIKit)不是非常熟悉,于是就写了很多凑出来的临时方案,简单的实现了功能。表面看起来挺好的,但是实际上代码已经外强中,骨子里都乱了。后期维护起来会让人痛不欲生。

了解一下UITableView的一些详细的技术细节甚至是UIKit的一些技术细节对于我们写出比较好的代码,比较好的实现任务是很有必要的。我们通过实现自己的TableView来反观UIKit的UITableView,来加深我们对UITableView和UIKit的理解。在这个过程中,我们会碰到非常多非常细节的问题,而这些正是我们需要注意并且掌握的。

同时,个人一直觉得对于搞IOS开发来说自己实现一遍TableView就像是一种成人礼一样。你能够通过实现一个UITableView来深入的理解UIKit的一些技术细节,对IOS UI编程所使用到的工具,有比较深入的了解。这样,写程序的时候才不会捉襟见肘。

言归正传。开始实现一个TableView。

dztableview's People

Contributors

jackielc avatar tencentwallet avatar yishuiliunian avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dztableview's Issues

NSCAssert描述有误

  • (void) reloadData
    {
    NSCAssert(_dataSourceReponse.funcNumberOfRows, @"dztalbeview %@ delegate %@ not response to selector numberOfRowsInDZTableView: ", self, _dataSource);
    NSCAssert(_dataSourceReponse.funcCellAtRow, @"dztalbeview %@ delegate %@ not response to selector dzTableView:cellAtRow: ", self, _dataSource);

    [self reduceContentSize];
    [self layoutNeedDisplayCells];
    }

NSCAssert 第一句描述有误 以上是修正后的
另感谢博主 提供那么相近的文章 分析和实现tableview重用机制 很值得看

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.