让UITableView的Cell都变成静态的
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/
让UITableView的Cell都变成静态的的更多相关文章
- 使用Autolayout实现UITableView的Cell动态布局和高度动态改变
本文翻译自:stackoverflow 有人在stackoverflow上问了一个问题: 1 如何在UITableViewCell中使用Autolayout来实现Cell的内容和子视图自动计算行高,并 ...
- iOS - UITableView中Cell重用机制导致Cell内容出错的解决办法
"UITableView" iOS开发中重量级的控件之一;在日常开发中我们大多数会选择自定Cell来满足自己开发中的需求, 但是有些时候Cell也是可以不自定义的(比如某一个简单的 ...
- iOS解决UITableView中Cell重用带来的问题
tableView的常规配置,当超出一屏的cell就会标上可重用的标识出列到可重用缓存池中,后面再根据可重用标识来到的可重的cell就会和前面显示同样内容. - (UITableViewCell *) ...
- iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath(汇总)
iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath 首先分析有几种原因,以及相应的解决方法 1.UITableViewCell的userInterac ...
- UITableView中cell里的UITextField不被弹出键盘挡住
UITableView中cell里的UITextField不被弹出键盘挡住 本人视频教程系类 iOS中CALayer的使用 效果如下: 源码: EditCell.h 与 EditCell.m // ...
- UITableView中cell点击的绚丽动画效果
UITableView中cell点击的绚丽动画效果 本人视频教程系类 iOS中CALayer的使用 效果图: 源码: YouXianMingCell.h 与 YouXianMingCell.m / ...
- 如何获取UITableView中cell的frame值
如何获取UITableView中cell的frame值 这个可以用来处理UITableView弹出键盘的问题 本人视频教程系类 iOS中CALayer的使用 效果: 源码: // // ViewC ...
- 用适配器模式处理复杂的UITableView中cell的业务逻辑
用适配器模式处理复杂的UITableView中cell的业务逻辑 适配器是用来隔离数据源对cell布局影响而使用的,cell只接受适配器的数据,而不会与外部数据源进行交互. 源码: ModelCell ...
- 视图交互--表视图(UITableView)的cell交互析略
在表视图UITableView的cell上经常有一些交互,根据项目开发中的情况,需要对此进行一些规范.总结出了几种交互方法,这些方法在其他视图的交互上同样可以适用.用一个简单的例子来举例说明一下,其他 ...
随机推荐
- CF 914G Sum the Fibonacci——子集卷积
题目:http://codeforces.com/contest/914/problem/G 第一个括号可以子集卷积:第三个括号可以用 FWT 异或卷积:这样算出选两个数组成 x 的方案数:三个部分的 ...
- GNU Radio: Overview of the GNU Radio Scheduler
Scetion 1: The Flowgraph The flowgraph moves data from sources into sinks. 一个流图由多个模块组成,其中一般包括信源(Sour ...
- selenium笔记2017
1,from time import sleep(先引入关键词) sleep(5) (就可以使用这个命令了) 可以停止页面5秒 1-1. 等待页面元素出现的时间(即没出现时,等待元素出现) ...
- mysql-7事务管理
1.事务的使用场景 mysql事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人愿,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数 ...
- window.onload()和$(document).ready()区别
执行时间:window.onload:必须等待网页中所有的内容加载完毕后(包括图片)才能执行;$(document).ready();网页中所有DOM结构绘制完毕后就执行,可能DOM元素关联的东西并没 ...
- 2017 年 PHP 程序员未来路在何方?
PHP 从诞生到现在已经有20多年历史,从Web时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js . GO . Python 不断地在挑战 PHP 的地位.这些技术的推 ...
- python xlwt操作excel
- 「小程序JAVA实战」小程序的举报功能开发(68)
转自:https://idig8.com/2018/09/25/xiaochengxujavashizhanxiaochengxudeweixinapicaidancaozuo66-2/ 通过点击举报 ...
- 在coursera上有哪些值得推荐的课程
来自知乎 https://www.zhihu.com/question/22436320/answer/224996328
- eclipse中debug改变变量的值
step1:debug断点到变量的下一行,在debug试图的右上角variables中看到该变量的值: step2:鼠标右键点击str出现下图,选择Change Value... step3:点击Ch ...