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. MyBatis的association示例——MyBatis学习笔记之三

    前两篇博文介绍的都是单表映射,而实际上很多时候我们需要用到较复杂的映射.今天学会的association的用法,就是一例,现写出来和大家分享(为简洁起见,ant工程中各文件.目录的布局,以及其它与前面 ...

  2. Cyborg Genes

    题意: 给两个字符串,求最短的以两字符串为子序列的字符串和个数 分析: 最长公共子序列的变形,num[i][j]表示个数 #include <map> #include <set&g ...

  3. HDU5715 XOR 游戏 二分+字典树+dp

    当时Astar复赛的时候只做出1题,赛后补题(很长时间后才补,懒真是要命),发现这是第二简单的 分析: 这个题,可以每次二分区间的最小异或和 进行check的时候用dp进行判断,dp[i][j]代表前 ...

  4. 关于display显示 linux

    export DISPLAY=ipaddressofyourmachineorpc:0.0 如果要在本来的机器上显示,使用 export DISPLAY=localhost:0

  5. 依赖包bcrypt安装Issues

    说明:本文在个人博客地址为edwardesire.com,欢迎前来品尝. 在决策树项目中,使用到了bcrypt依赖包来加密文件.在wini8(win7)部署安装这个依赖的时候容易出现出现了问题. 解决 ...

  6. JavaFX 2 Dialogs

    http://edu.makery.ch/blog/2012/10/30/javafx-2-dialogs/ ———————————————————————————————————————————— ...

  7. WebService学习之四:关于JAX-WS 注释

    基于 XML 的 Web Service 的 Java API"(JAX-WS)通过使用注释来指定与 Web Service 实现相关联的元数据以及简化 Web Service 的开发.注释 ...

  8. poj 2226 Muddy Fields(最小覆盖点+构图)

    http://poj.org/problem?id=2226 Muddy Fields Time Limit: 1000MS   Memory Limit: 65536K Total Submissi ...

  9. hibernate注解@JoinTable说明

    表关联(@JoinTable)注解说明:@Target({METHOD, FIELD})public @interface JoinTable{    String name() default &q ...

  10. [HDU 4089]Activation[概率DP]

    题意: 有n个人排队等着在官网上激活游戏.Tomato排在第m个. 对于队列中的第一个人.有以下情况: 1.激活失败,留在队列中等待下一次激活(概率为p1) 2.失去连接,出队列,然后排在队列的最后( ...