Swift - 实现点击UITableView单元格时自动展开单元格
下面是一个列表单元格cell的折叠展开效果的demo。当点击单元格时会展开该单元格,便于显示一些详情什么的。点击其他单元格原来的会关闭,同时有动画效果。
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
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 { return 1; } //返回表格行数(也就是返回控件数) 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){ return 120 } return 40 } } |
Swift - 实现点击UITableView单元格时自动展开单元格的更多相关文章
- MyEclipse 选中右侧编辑的文件时自动展开左侧目录树
- easui tree载入时自动展开无子节点的节点
利用loadFilter对后台返回的原始数据进行过滤处理,将数据中的state字段修改相应的值,若无子节点,则改成open,若有子节点,则改成closed. 由于一个node属性只有下面几项内容,因此 ...
- EXCEL在改动某几个单元格时隐藏空列
概述 今天我哥来找我帮他搞下excel表格,本着程序猿对程序无所不能的精神,我爽快的答应了.结果查了半天才搞定.现在记录在此,供自己以后参考,相信对其他人也有用. PS:这几天正在弄博客,马上就要弄完 ...
- iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建
iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建 一.实现效果 说明:该示例在storyboard中使用动态单元格来完成. 二.实现 1.项目文件结构 ...
- Java删除word合并单元格时的重复值
Spire.Doc提供了Table.applyVerticalMerge()方法来垂直合并word文档里面的表格单元格,Table.applyHorizontalMerge()方法来水平合并表格单元格 ...
- Excel自文本导入内容时如何做到单元格内换行
前言:今天在处理数据的时候,在数据库中用到了\n换行符号,目的是在同表格内做到数据多行显示,比如 字段名1 字段名2 字段名3 1 数据一行 数据二行 数据三行 例子是在sql查询后的结果 ...
- LVC函数重要参数 EDT_CLL_CB:退出可编辑单元格时回调
6. I_GRID_SETTINGS 参数属性该参数用于设置Grid相关参数(打印.单元格回调):类型为:LVC_S_GLAY,该结构包括:01) COLL_TOP_P:最小化 TOP_OF_PAGE ...
- WinForm笔记1:TextBox编辑时和DataGridView 单元格编辑时 的事件及其顺序
TextBox 编辑框 When you change the focus by using the mouse or by calling the Focus method, focus event ...
- JAVA操作Excel时文字自适应单元格的宽度设置方法
使用JAVA操作Excel通常都使用JXL,方法很简单网上也有很多的教程,然后往往一些细节性的问题却导致我们这些Programmer苦恼不已.这两天帮一个朋友做一个Excel表格自动生成的小软件,就遇 ...
随机推荐
- Xcode的Architectures、Valid Architectures和Build Active Architecture Only属性
Architectures 这代表,在这个项目里你想要Xcode编译的目标设备列表. Valid Architectures 还不是太明确这个设置的意图,但是一般来说是不需要更改的,和Architec ...
- C - Virtual Friends
网上搜了,好多c++里的东西啊 有思路不会做,真烦,还是好好学c++: 先把题和代码粘过来,过几天学c++好了再看 http://acm.hust.edu.cn/vjudge/contest/view ...
- 64位系统/32位系统下/8位CPU的数据宽度
不同的编译器根据不同的 64 位模型有所不同. 比如 Visual C++,从第一个支持 64 位的版本起,一直就是使用 LLP64 内存模型,也就是说,编译出的代码除了 long 和指针是 64 位 ...
- javascript (string 部分)
<html> <body> <script type="text/javascript"> var str="ab:cd:ef:gh& ...
- Python高级之Socket 探索(五)
目录: 面向对象 反射 socket 一.面向对象 方法 方法包括:普通方法.静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同. 普通方法:由对象调用:至少一个self参数:执行普通 ...
- Qt5程序开机自启动(windows)
简介 window下开机启动最简单的实现方式就是在注册表中添加启动项目 添加位置有两个 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVer ...
- javaCore分析示例(转)
当两个或多个线程彼此形成循环依赖关系时,就出现了死锁.例如,如果线程 A 处于等待线程 B 的等待状态,而同时线程 B 处于等待线程 A 的等待状态,则出现了死锁.一旦形成此情况,线程 A 和线程 B ...
- Oracle 11g RAC OCR 与 db_unique_name 配置关系 说明
一. 问题一 在做RAC standby 的alert log里发现如下错误: SUCCESS: diskgroup DATA was mounted ERROR: failed toestablis ...
- XML 的实体引用
实体引用 在 XML 中,一些字符拥有特殊的意义. 如果你把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始. 这样会产生 XML 错误: ...
- Orleans is a framework
Introduction Orleans is a framework that provides a straightforward approach to building distributed ...