• IOS-static cell 与 dynamic cell 混合使用


    static cell 与 dynamic cell 混合使用

    关于静态cell与动态cell的混合使用,google一下便会有很多相关文章,这里也是看过一些前辈的经验(已经忘记具体是从哪篇文章得到的帮助)之后自己做的笔记。

    在某些界面中static cell与dynamic cell混合使用会事半功倍,比如手机上的Wi-Fi功能等,效果图如下:


    Wi-Fi

    Wi-Fi界面的第一组与第三组的行数都是固定的,且布局并不相同,类似这样的布局使用static cell很快就可以完成,然而第二组却需要使用dynamic cell。这时候就会用到静态cell与动态cell混合使用的情况。

    首先,在Storyboard中添加一个UITableViewController,设置为Static cell,并设置好第一组与第三组的内容,第二组需要设置一个空的Cell,如图:


    UITableViewController

    然后,给第二组的空白Cell设置identifier值,如图:


    设置identifier

    然后,第二组需要自定义cell,这里使用XIB来完成,如图:


    dynamic cell

    接下来需要用代码注册Nib,如下:

    1 let nib = UINib(nibName: "WiFiTableViewCell", bundle: nil)
    2 tableView.registerNib(nib, forCellReuseIdentifier: "WiFiTableViewCell")

    最后,为了让 static cell 与 dynamic cell 能够混合使用,需要实现TableView的代理,代码如下:

     1    // 以下代理方法必须实现
     2 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
     3   if indexPath.section == 1 {
     4     let cell = tableView.dequeueReusableCellWithIdentifier("WiFiTableViewCell") as? WiFiTableViewCell
     5     return cell!
     6   }
     7   return super.tableView(tableView, cellForRowAtIndexPath: indexPath)
     8 }
     9 
    10 override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    11   if section == 1 {
    12     return 10 //这里返回第二组的行数
    13   }
    14   return super.tableView(tableView, numberOfRowsInSection: section)
    15 }
    16 
    17 override func tableView(tableView: UITableView, indentationLevelForRowAtIndexPath indexPath: NSIndexPath) -> Int {
    18   if indexPath.section == 1 {
    19     return super.tableView(tableView, indentationLevelForRowAtIndexPath: NSIndexPath(forRow: 0, inSection: 1))
    20   }
    21   return super.tableView(tableView, indentationLevelForRowAtIndexPath: indexPath)
    22 }
    23 
    24 override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    25   if indexPath.section == 1 {
    26     return 44
    27   }
    28   return super.tableView(tableView, heightForRowAtIndexPath: indexPath)
    29 }

    值得注意的是:

    • 在storyboard中需要给第二组设置一行空的Cell,并设置identifier值。
    • 在代码中也需要注册Cell
    • 上面提到的代理方法必须实现

    最后,本文主要是记录关于 static cell 与 dynamic cell 的混合使用,因此很多细节问题并没有处理,更多关于static cell另外的一些使用,可以点击这里【更优雅地使用Static Cell】

    【Demo下载】



    文/Chakery(简书作者)
    原文链接:http://www.jianshu.com/p/c3645c13af4b
    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
  • 相关阅读:
    Java基础知识回顾-20(泛型)
    Java基础知识回顾-19(Collect接口,Iterator迭代器与增强for循环)
    Java基础知识回顾-18(Math类,Arrays类和大数据运算)
    Java基础知识回顾-17(基本类型包装类与System类)
    Java基础知识回顾-16(Date,DateFormat和Calendar)
    PSP DAILY软件功能说明书
    第六周PSP
    王者荣耀交流协会第二次Scrum立会
    找bug——加分作业
    第五周PSP
  • 原文地址:https://www.cnblogs.com/oc-bowen/p/5884286.html
Copyright © 2020-2023  润新知