zoukankan      html  css  js  c++  java
  • Swift

    下面是一个列表单元格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-5章感想
    随笔 | 分布式版本控制系统Git的安装与使用
    随笔 | 对软件工程的一些感想
    为什么加载 JavaScript 使用 "src",CSS 使用 "href"?有其含义还是历史语法遗留?
    webstrom 添加一键open in browser
    sublime 代码段
    二.sublime配置 sublimecondeintel 分号后不要提示
    一.sublime配置 sublime 新建文档 默认html
    chrome使用
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4843323.html
Copyright © 2011-2022 走看看