当前位置: 首页 > news >正文

让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(0, 10, CommonValues.kScreenWidth, 450), 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 0:
                  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/

相关文章:

  • 牛客练习赛37
  • 『原创』设置SQL Server 2005自动备份——数据库邮件设置(图文)
  • Gmail工具和插件网址大全
  • 北京城市生态系统研究站取得2011年国自然科学基金重点基金资助
  • samba 文件共享
  • Nginx的介绍
  • 14个值得推荐的个人提升方法
  • 上海科学家研制出新型“耐火宣纸”
  • Java Web:项目结构和web.xml
  • 调查:澳门96%打工者称奖金、薪酬决定工作去留
  • 前端技术周刊 2019-01-14:客户端存储
  • 前端工程化的理解
  • 公安部发2019年春运交通安全预警 道路客运量将达24.6亿人次
  • WebSocket 协议 5~10 节
  • javascript从右向左截取指定位数字符的3种方法
  • 【React系列】如何构建React应用程序
  • CentOS 7 防火墙操作
  • emacs初体验
  • Javascript Math对象和Date对象常用方法详解
  • k个最大的数及变种小结
  • PAT A1120
  • PHP的类修饰符与访问修饰符
  • Redis的resp协议
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • tab.js分享及浏览器兼容性问题汇总
  • vue-cli在webpack的配置文件探究
  • 官方解决所有 npm 全局安装权限问题
  • 警报:线上事故之CountDownLatch的威力
  • 面试总结JavaScript篇
  • 普通函数和构造函数的区别
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 十年未变!安全,谁之责?(下)
  • 数组大概知多少
  • 我与Jetbrains的这些年
  • 一道面试题引发的“血案”
  • 字符串匹配基础上
  • Spring第一个helloWorld
  • 数据库巡检项
  • (27)4.8 习题课
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)u-boot-nand.bin的下载
  • (转)Sql Server 保留几位小数的两种做法
  • (轉)JSON.stringify 语法实例讲解
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • *2 echo、printf、mkdir命令的应用
  • 、写入Shellcode到注册表上线
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net经典笔试题