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

最新文章

  1. 【Java并发编程实战】----- AQS(二):获取锁、释放锁
  2. 1.3 基础知识——GP2.1 方针(Policy)
  3. AFNetworking(AFN)总结
  4. HDU 1114 完全背包+判断能否装满
  5. 决策树算法实现(train+test,matlab) 转
  6. [GIF] GIF Loop Coder - Animation Functions
  7. Android 使用monkey自动测试
  8. 【剑指Offer学习】【面试题18 :树的子结构】
  9. MVC中登录页图片验证码总结
  10. ROS命令
  11. vue-购物车
  12. Diango + uwsgi + nginx 项目部署(可外网访问)
  13. Android 获取View的高度或TextView的行数, 实现自适应的textview
  14. 猴子吃桃问题---C实现
  15. 统计一个数据库中,无记录的表的sql语句
  16. MyBatis学习(01)之解决mapper绑定异常
  17. IOI2018题解
  18. Andriod NDK编译的时候无法使用math.h的函数。
  19. call_user_func_array 应用场景分析
  20. PHP是什么?

热门文章

  1. win7 ShuipFCMS 配置 及问题
  2. 用Flask实现视频数据流传输
  3. MYSQ提高L查询效率的策略总结
  4. iOS开发网络数据之AFNetworking使用1
  5. android4.0移植,拨号异常
  6. 我的Python成长之路---第一天---Python基础(5)---2015年12月26日(雾霾)
  7. 一天一个类,一点也不累 之 Vector
  8. C-整数划分
  9. QVector 和vector的比较(QVector默认使用隐式共享,而且有更多的函数提供)
  10. cocos2dx-lua捕获用户touch事件的几种方式