博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift - 实现点击UITableView单元格时自动展开单元格
阅读量:6983 次
发布时间:2019-06-27

本文共 3416 字,大约阅读时间需要 11 分钟。

下面是一个列表单元格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
    
}
}

转载地址:http://wmvpl.baihongyu.com/

你可能感兴趣的文章
将RHEL7/centos7系统网卡名称eno16777736改为eth0
查看>>
Nginx域名跳转
查看>>
NTP时间服务器安装
查看>>
Thinkphp3.23 关联模型relation方法不存在解决方法
查看>>
bash脚本编程之一 条件判断及算术运算
查看>>
工作中非常逆天的shell命令
查看>>
我的友情链接
查看>>
[IOS]clang diagnostic、Wprotocol ..
查看>>
HTML4.01规范-HTML文档的顶层结构(3)
查看>>
11个鲜为人知的实用Linux命令 - Part 2
查看>>
我国今日接连发生4起地震 震级均在3级以上
查看>>
优化PhoneGAP的Splashscreen 类
查看>>
增强 wp_list_authors 显示文章最多的作者
查看>>
代码:显示查询的日历
查看>>
完整的目标管理三段俱全
查看>>
AD 脚本kixtart运用之六(outlook邮件批量生成签名)
查看>>
Tomcat 日志
查看>>
优化SQL查询:如何写出高性能SQL语句
查看>>
误删/etc/passwd的修复
查看>>
Linux图形界面与命令行模式切换
查看>>