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都变成静态的的更多相关文章

  1. 使用Autolayout实现UITableView的Cell动态布局和高度动态改变

    本文翻译自:stackoverflow 有人在stackoverflow上问了一个问题: 1 如何在UITableViewCell中使用Autolayout来实现Cell的内容和子视图自动计算行高,并 ...

  2. iOS - UITableView中Cell重用机制导致Cell内容出错的解决办法

    "UITableView" iOS开发中重量级的控件之一;在日常开发中我们大多数会选择自定Cell来满足自己开发中的需求, 但是有些时候Cell也是可以不自定义的(比如某一个简单的 ...

  3. iOS解决UITableView中Cell重用带来的问题

    tableView的常规配置,当超出一屏的cell就会标上可重用的标识出列到可重用缓存池中,后面再根据可重用标识来到的可重的cell就会和前面显示同样内容. - (UITableViewCell *) ...

  4. iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath(汇总)

    iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath 首先分析有几种原因,以及相应的解决方法 1.UITableViewCell的userInterac ...

  5. UITableView中cell里的UITextField不被弹出键盘挡住

    UITableView中cell里的UITextField不被弹出键盘挡住 本人视频教程系类   iOS中CALayer的使用 效果如下: 源码: EditCell.h 与 EditCell.m // ...

  6. UITableView中cell点击的绚丽动画效果

    UITableView中cell点击的绚丽动画效果 本人视频教程系类   iOS中CALayer的使用 效果图: 源码: YouXianMingCell.h 与 YouXianMingCell.m / ...

  7. 如何获取UITableView中cell的frame值

    如何获取UITableView中cell的frame值 这个可以用来处理UITableView弹出键盘的问题 本人视频教程系类   iOS中CALayer的使用 效果: 源码: // // ViewC ...

  8. 用适配器模式处理复杂的UITableView中cell的业务逻辑

    用适配器模式处理复杂的UITableView中cell的业务逻辑 适配器是用来隔离数据源对cell布局影响而使用的,cell只接受适配器的数据,而不会与外部数据源进行交互. 源码: ModelCell ...

  9. 视图交互--表视图(UITableView)的cell交互析略

    在表视图UITableView的cell上经常有一些交互,根据项目开发中的情况,需要对此进行一些规范.总结出了几种交互方法,这些方法在其他视图的交互上同样可以适用.用一个简单的例子来举例说明一下,其他 ...

随机推荐

  1. python把指定目录下的递归所有目录和文件名转换成小写或大写

    cat convert.py #!/usr/bin/env python # -*- coding:utf-8 -*- import os, sys def convert(rootdir, opty ...

  2. 纯php实现中秋博饼游戏(2):掷骰子并输出结果

    这篇是纯php实现中秋博饼游戏系列博文(2) 上文是:纯php实现中秋博饼游戏(1):绘制骰子图案 http://www.cnblogs.com/zqifa/p/php-dice-1.html要纯ph ...

  3. 为什么JSP会比Beetl慢

    转自:http://my.oschina.net/xiandafu/blog/475740 JSP是预编译成class的,然后模板渲染里比Beetl慢很多,文章从JSP静态文本处理不足,以及JSTL实 ...

  4. Ubuntu下VIM使用指南

    基本命令: Esc:VIM中的万能功能键之一,基本上任何时候按这个键,都可以返回VIM的普通状态. i:在普通状态下按i可以进入“插入”编辑状态,这个时候按方向键移动光标,在想要输入的地方输入字符,用 ...

  5. 停止调试 IIS 不退出

    在VS主面板打开:工具->选项->调试->编辑继续   取消选中[启用"编辑并继续"] 就可以(不过这是针对所有的调试). 若只想对单个项目进行设置,可以选择自己 ...

  6. 浅谈Laravel框架的CSRF

    前文 CSRF攻击和漏洞的参考文章: http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html Laravel默认是开启了CSRF功能, ...

  7. maven常用命令集合

    作者:ydlmlh 原文:http://ydlmlh.iteye.com/blog/2158973 抽了点时间,整理了一些maven常用命令参数,以便参考:参考了maven官网和网上其他一些maven ...

  8. 实用 Linux 命令行使用技巧集锦

    最近在Quora上看到一个问答题目,关于在高效率Linux用户节省时间Tips.将该题目的回答进行学习总结,加上自己的一些经验,记录如下,方便自己和大家参考. 下面介绍的都是一些命令行工具,这些工具在 ...

  9. mysql性能优化-慢查询分析、优化索引和配置【转】

    一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 profiling分析查询 2索引及查询优化 三.配置优化 1)      max_connec ...

  10. 使用通配符配置action

    建立struts2wildcard项目,此实例基本仿照前面前面第7点的实例改写而成.为了使用通配符,只需要改写配置文件即可.此实例未使用通配时的配置文件如下: <action name=&quo ...