UITableView给我们提供了一个非常不错的展示列表的工具。内置了复用机制,其中的Cell按照一般的写法就可以实现服用,不用在Cell滚动的时候每次都创建一个新的。实现了非常好的用户体验。但是,有的时候在某些场景下我们需要的不是复用。我们会自己创建好所有需要的Cell,并放在UITableView中。这个前提是所要展示的Cell的个数是非常有限的。比如,在一个APP的设置中。展示的样式是UITableView的Grouped样式,有Section Header把几个不同的分组分别开来。但是全部的Cell也只是展示一些“推送设置”、
”字体设置“、”离线设置“和“清空缓存”之类的内容。十个手指都可以数的过来。

实现的方式,最简单的就是使用Xib文件了。不过,这年月讨论xib已经显得陈旧。都是用Storyboard了。一个Scene的Controller指定UITableViewController或者继承自UITableViewController的。之后就可以拖上去需要的Cell并定制,等等。但是,最近因为旧项目适配的问题,所以使用的都是non-storyboard的。这就需要使用代码直接创建了。这里不得不吐槽一下,使用Storyboard做适配还不一定有代码指定frame来得快!

代码创建static cell的话就不需要使用UITableViewController或者其子类了。代码就是自由!无论Cell是不是静态的,UITableView还是必须要有的。所以我们的分布介绍里一开始还是创建一个TableView。

self.tableView = UITableView(frame: CGRectMake(, , CommonValues.kScreenWidth, ), style: UITableViewStyle.Plain)
self.tableView.bounces = false
self.tableView.scrollEnabled = false
self.tableView.delegate = self
self.tableView.dataSource = self
self.tableView.backgroundColor = UIColor.whiteColor()
self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None scrollView.addSubview(self.tableView)  //我这里是放在scroll view上的,各位自行定夺放在哪里

之后,像前文所说的。我们需要自行创建cell。

    var pushSettingsCell: UITableViewCell!
// other cells here
// ...
var clearCacheCell: UITableViewCell!

关键是在方法func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell里面如何实现。按照一般的实现方法是先去dequeue一个cell,如果为空的话则初始化一个UITableViewCell出来,在上面放上需要的控件(如果你没有重新自定义一个cell的话)。最后返回这个cell。但是,这样就不是静态cell了。因为,你不知道这个方法返回的cell是不是你之前指定在这个row上的cell。 静态cell就是无论如何返回的就是那个原来创建的。也就是我们在上面的代码中创建的pushSettingsCell等。所以,这个方法是这样的:

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell: UITableViewCell? = nil
switch(indexPath.row){
case :
cell = pushSettingsCell
// ...
default:
cell = // another cell
break;
}
return cell!
}

这样就已经实现的差不多了。但是,如果你得静态UITableView中还存有你需要提取出来的值的话,还是有些麻烦。那么重构一下代码。把初始化出来的Cell放在数组中。

var cellList: [UITableViewCell]?

这样在上面的方法中提取cell的时候就可以非常简单。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
return cellList![indexPath.row]
}

refered:http://derpturkey.com/create-a-static-uitableview-without-storyboards/

最新文章

  1. python征程3.1(列表,迭代,函数,dic,set,的简单应用)
  2. ajax实现上传文件
  3. SQL Server 2012提供的OFFSET/FETCH NEXT与Row_Number()对比测试 [T]
  4. Nagios监控ganglia的指标
  5. poj 2262【素数表的应用---判断素数】【哈希】
  6. SQL入门经典(一)之简介
  7. LeetCode Combinations (DFS)
  8. 2016 MIPT Pre-Finals Workshop Taiwan NTU Contest
  9. C语言使用中的细节问题总结
  10. Java 实现享元(Flyweight)模式
  11. C++第二天学习
  12. OAuth2.0记录
  13. 一个请求过来都经过了什么?(Thrift版)
  14. vue-cli@2的原理解析
  15. 2018 ,请领取您Power BI 年终报告
  16. 2017第八届蓝桥杯C/C++语言A组
  17. 自兴人工智能 python特点了解
  18. ruby select 方法,可用于先查询结果后,再次用条件限制
  19. 在python3下使用requests,xpath,urllib爬取不得姐网站相关视频爬虫源代码
  20. CF-413E-线段树

热门文章

  1. PHP安全性漫谈
  2. LogHelp 日记分天记录,只记30天日记
  3. TextRank in Python
  4. emacs之配置自动安装脚本
  5. 利用PHP实现页面跳转同时POST传参,CURL不行
  6. springBatch学习 batch的使用方式(5)
  7. 正规式->最小化DFA说明
  8. 前端开发之jQuery位置属性和筛选方法
  9. CentOS Linux最常用命令及快捷键整理
  10. clr相关的一些工具