UITableView实现单元格展开与隐藏

 关于UITableView的展开的收缩在前面的文章我已经结束,就是使用代理,通知,block传值的时候实现的,当时是使用一个Bool值来实现,最后使用着三种方法实现传值。
详细请看:http://www.cnblogs.com/iCocos/p/4659878.html,在这里虽然看似相似,但是却已不同的方式实现,而且功能也不同,当然这里只是简单的实现展开,如果你完全理解了上面那篇文章,那么以后关于这种展开基本上没有任何问题,就算项目再大,而且又学会了三种传值方式!

 
 
 
下面是一个列表单元格cell的折叠展开效果的demo。

当点击单元格时会展开该单元格,便于显示一些详情什么的。点击其他单元格原来的会关闭,同时有动画效果。

 
效果如如下:
 

代码如下:

 import UIKit

 class ViewController: UIViewController,UITableViewDelegate,
 UITableViewDataSource {

     var tableView:UITableView?

     var ctrlnames:[String] = ["UILabel 标签","UIButton 按钮","UIDatePiker 日期选择器",
         "UITableView 表格视图"]

     var selectedCellIndexPath:NSIndexPath!

     override func viewDidLoad() {
         super.viewDidLoad()

         //创建表视图
         self.tableView = UITableView(frame: UIScreen.mainScreen().applicationFrame,
             style:UITableViewStyle.Plain)
         self.tableView!.delegate = self
         self.tableView!.dataSource = self
         //创建一个重用的单元格
         self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "SwiftCell")
         self.view.addSubview(self.tableView!)
     }

     //在本例中,只有一个分区
     func numberOfSectionsInTableView(tableView: UITableView!) -> Int {
         ;
     }

     //返回表格行数(也就是返回控件数)
     func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
         return self.ctrlnames.count
     }

     //创建各单元显示内容(创建参数indexPath指定的单元)
     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
         -> UITableViewCell
     {
         var label =  UILabel(frame:CGRectZero)
         label.setTranslatesAutoresizingMaskIntoConstraints(false)
         label.text = self.ctrlnames[indexPath.row]

         var textview=UITextView(frame:CGRectZero)
         textview.setTranslatesAutoresizingMaskIntoConstraints(false)
         textview.textColor = UIColor.grayColor()
         //演示效果,暂时写死
         textview.text = "UIDatePicker 是一个控制器类,封装了 UIPickerView,但是他是UIControl的子类,"

         let identify:String = "SwiftCell"
         var cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier:identify)
         //自动遮罩不可见区域,超出的不显示
         cell.layer.masksToBounds = true
         cell.contentView.addSubview(label)
         cell.contentView.addSubview(textview)

         //创建一个控件数组
         var views:NSMutableDictionary = NSMutableDictionary()
         views.setValue(label, forKey: "label")
         views.setValue(textview, forKey: "textview")
         cell.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
             "H:|-15-[label]-15-|", options: nil, metrics: nil, views: views))
         cell.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
             "H:|-15-[textview]-15-|", options: nil, metrics: nil, views: views))
         cell.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
             "V:|[label(40)]", options: nil, metrics: nil, views: views))
         cell.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
             "V:|-40-[textview(80)]", options: nil, metrics: nil, views: views))
         return cell
     }

     // UITableViewDelegate 方法,处理列表项的选中事件
     func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!)
     {
         self.tableView!.deselectRowAtIndexPath(indexPath, animated: false)
         selectedCellIndexPath = indexPath
         // Forces the table view to call heightForRowAtIndexPath
         tableView!.reloadRowsAtIndexPaths([indexPath],
             withRowAnimation: UITableViewRowAnimation.Automatic)
     }

     //点击单元格会引起cell高度的变化,所以要重新设置
     func tableView(tableView: UITableView,
         heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
             if(selectedCellIndexPath != nil && selectedCellIndexPath == indexPath){

             }

     }
 }

iOS开发——UI_swift篇&UITableView实现单元格展开与隐藏的更多相关文章

  1. iOS开发——UI_swift篇&UItableView实现移动单元格

    UItableView实现移动单元格   1,下面的样例是给表格UITableView添加单元格移动功能: (1)给表格添加长按功能,长按后表格进入编辑状态 (2)在编辑状态下,可以看到单元格后面出现 ...

  2. iOS开发——UI_swift篇&UITableView实现索引功能

    UITableView实现索引功能     关于UItableView的索引在平时项目中所见不多,最多的就是跟联系人有关的界面,虽然如此,但是作为一个swift开发的程序必须知道的一个技术点,所以今天 ...

  3. iOS开发UI篇—UITableview控件简单介绍

    iOS开发UI篇—UITableview控件简单介绍 一.基本介绍 在众多移动应⽤用中,能看到各式各样的表格数据 . 在iOS中,要实现表格数据展示,最常用的做法就是使用UITableView,UIT ...

  4. iOS开发UI篇—UITableview控件基本使用

    iOS开发UI篇—UITableview控件基本使用 一.一个简单的英雄展示程序 NJHero.h文件代码(字典转模型) #import <Foundation/Foundation.h> ...

  5. iOS开发UI篇—UITableview控件使用小结

    iOS开发UI篇—UITableview控件使用小结 一.UITableview的使用步骤 UITableview的使用就只有简单的三个步骤: 1.告诉一共有多少组数据 方法:- (NSInteger ...

  6. iOS开发——Autolayout下动态调整单元格高度

    情景描述: 有时候我们希望更新某一个单元格的数据,通常的做法是使用reloadData方法更新整个单元格.但是对一些情况是不适用的或者说实现起来比较麻烦.比如说这种简单的"点开"一 ...

  7. iOS开发——UI_swift篇&TableView实现页眉和页脚

    TableView实现页眉和页脚   在UItableView中header和footer是很常见的,而且他能让你实现很复杂的功能,我们见过最多的就是下拉刷新和上啦加载更多,当然你还可以在上面添加一个 ...

  8. iOS开发——UI_swift篇&TableView自定义聊天界面

    TableView自定义聊天界面   1,下面是一个放微信聊天界面的消息展示列表,实现的功能有: (1)消息可以是文本消息也可以是图片消息 (2)消息背景为气泡状图片,同时消息气泡可根据内容自适应大小 ...

  9. iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建

    iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建 一.实现效果 说明:该示例在storyboard中使用动态单元格来完成. 二.实现 1.项目文件结构 ...

随机推荐

  1. Oracle数据库导出

    一. pl/SQL方式 1.打开plsql,找到工具栏,导出表

  2. [Everyday Mathematics]20150104

    设 $a>0$, $$\bex x_1=1,\quad x_{n+1}=x_n+an\prod_{i=1}^n x_i^{-\frac{1}{n}}. \eex$$ 试证: $$\bex \vl ...

  3. xp重装系统后恢复Linux启动

    我的电脑----右键-----属性----高级----启动与恢复故障----设置编辑 [boot loader]timeout=3default=multi(0)disk(0)rdisk(0)part ...

  4. <转>Python3.x和Python2.x的区别介绍

    1.性能Py3.0运行 pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好的优化结果.Py3.1性能比Py2.5慢 ...

  5. Selenium2Library系列 keywords 之 _SelectElementKeywords 之 _get_values_for_options(self, options)

    def _get_values_for_options(self, options): values = [] for option in options: values.append(option. ...

  6. 通过gdb调试分析Linux内核的启动过程

    作者:吴乐 山东师范大学 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验流程 1.打开环境 执 ...

  7. 状压DP uvalive 6560

    // 状压DP uvalive 6560 // 题意:相邻格子之间可以合并,合并后的格子的值是之前两个格子的乘积,没有合并的为0,求最大价值 // 思路: // dp[i][j]:第i行j状态下的值 ...

  8. C++读取、旋转和保存bmp图像文件编程实现

    以前也遇到过bmp文件的读写.这篇博客很好,写的其他内容也值得学习. 参考:http://blog.csdn.net/xiajun07061225/article/details/6633938  学 ...

  9. apache+php+mysql windows下环境配置

    需要注意的是,目前apache和php以及mysql都要用32位的,机子是64位的也是安装32位.我之前安装64位的版本,总是出现问题.回归正题: 所需要软件: 1.apache:去官网下载,我这边用 ...

  10. 信息图:iOS 7开发者需要知道的事

      如果你想为iOS 设备开发app,你需要知道如何与软件交互,如何设计,你还要知道苹果独特的开发理念和开发工具.真正的能力还需要成功地从其他行业领域借鉴核心概念.最后把所有这些东西糅合进你的信息库中 ...