让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上经常有一些交互,根据项目开发中的情况,需要对此进行一些规范.总结出了几种交互方法,这些方法在其他视图的交互上同样可以适用.用一个简单的例子来举例说明一下,其他 ...
随机推荐
- 【转】Linux 图形界面与命令行模式切换
原文网址:http://blog.csdn.net/ldl22847/article/details/7600368 Tip:使用环境VMware Workstation OS:CentOS 6 ...
- linux下配置python环境 django创建helloworld项目
linux下配置python环境 1.linux下安装python3 a. 准备编译环境(环境如果不对的话,可能遇到各种问题,比如wget无法下载https链接的文件) yum groupinstal ...
- 如何利用 AVDictionary 配置参数(转)
本文是我的 FFMPEG Tips 系列的第五篇文章,准备介绍下 ffmpeg 提供的一个非常好用的健值对工具:AVDictionary,特别是对于没有 map 容器的 c 代码,可以充分利用它来配置 ...
- C Socket编程之Connect超时 (转)
网络编程中socket的分量我想大家都很清楚了,socket也就是套接口,在套接口编程中,提到超时的概念,我们一下子就能想到3个:发送超时,接收超时,以及select超时(注:select函数并不是只 ...
- C语言 字符串处理函数 转自 http://blog.chinaunix.net/uid-25885064-id-3175049.html
C字符串处理函数 2012-04-13 18:14:16 分类: C/C++ void *memccpy (void *dest, const void *src, int c, size_t n) ...
- JAVA面向对象编程课程设计——web版斗地主
一.团队课程设计博客链接 JAVA面向对象编程课程设计--网络版单机斗地主 二.个人负责模块或任务说明 实体类的设计 斗地主规则的实现 人机自动出牌的算法 实现数据库的DAO模式 三.自己的代码提交记 ...
- C# mysql 连接Apache Doris
前提: 安装mysql odbc驱动程序,目前只不支持8.0的最新版本驱动,个人使用的是5.1.12的驱动(不支持5.2以上版本),下载地址为: x64: https://cdn.mysql.com ...
- babun编译安装git(2.12.0)遇到的问题及解决办法
1. 下载git wget https://www.kernel.org/pub/software/scm/git/git-2.12.0.tar.xz 你或许需要加上选项: --no-check-ce ...
- ImportError: Couldn't import Django.或者提示Django 模块不存在
ImportError: Couldn't import Django. 或者 多版本的python引起的,执行以下命令 即可解决问题 python3是新的版本的python python3 -m ...
- MPI 计时器函数 MPI_Wtime()
▶ 计时器函数 MPI_Wtime() 以及头文件 timer.h 中的宏函数 GET_TIME(),类似 time.h 中函数 clock() 的用法.注意 函数 clock() 记录的是CPU时间 ...