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. (原创)LAMP教程1-下载虚拟机软件

    (原创)LAMP教程1 从今天开始会在我的博客更新LAMP教程,第一章节就是安装虚拟机,因为不可能所有的人都有机会操作服务器,所以今天我打算教大家用虚拟机安装配置当下比较流行的框架,lamp. 好了费 ...

  2. HDU 5749 Colmerauer 单调队列+暴力贡献

    BestCoder Round #84   1003 分析:(先奉上zimpha巨官方题解) 感悟:看到题解单调队列,秒懂如何处理每个点的范围,但是题解的一句算贡献让我纠结半天 已知一个点的up,do ...

  3. XTUOJ1247 Pair-Pair 预处理+暴力

    分析:开个1000*1000的数组,预处理矩阵和,然后分类讨论就好 时间复杂度:O(n) #include <cstdio> #include <iostream> #incl ...

  4. <译>Selenium Python Bindings 3 - Navigating

    当你想要通过webdriver导航到一个链接,正常的方式点是通过调用get方法: driver.get("http://www.google.com") Interacting w ...

  5. Selenium2Library系列 keywords 之 _SelectElementKeywords 之 _get_select_list_options_selected(self, locator)

    def _get_select_list_options_selected(self, locator): select = self._get_select_list(locator) # TODO ...

  6. 一些不错的英文歌曲MV,留个存档!

    Lambada [[http://www.yinyuetai.com/video/265213]]Trouble Is A Friend [[http://www.yinyuetai.com/vide ...

  7. 多校7 HDU5818 Joint Stacks

    多校7 HDU5818 Joint Stacks 题意:n次操作.模拟栈的操作,合并的以后,每个栈里的元素以入栈顺序排列 思路:开三个栈,并且用到了merge函数 O(n)的复杂度 #include ...

  8. 有关android UI 线程

    1. GUI线程框架 常见的 Swing, SWT框架都是作为单线程子系统来实现的,实际上不仅限于在Java中, Qt.MacOS Cocoa以及其他的环境中的GUI框架都是单线程的.虽然很多人尝试过 ...

  9. mysql 查看锁表解锁

    -- 查看那些表锁到了show OPEN TABLES where In_use > 0;-- 查看进程号show processlist;--删除进程 kill 42236:

  10. hadoop2.7【单节点】单机、伪分布、分布式安装指导

    问题导读 1.从本文部署实际部署,总结本地模式.伪分布.分布式的区别是什么?2.单机是否是伪分布?3.本地模式是否可以运行mapreduce? 来源:about云 http://www.aboutyu ...