热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS开发——UI_swift篇&UITableView实现单元格展开与隐藏

UITableView实现单元格展开与隐藏下面是一个列表单元格cell的折叠展开效果的demo。当点击单元格时会展开该单元格,便于显示一些详情什么的。点击其他单元格原来的会关闭,同

UITableView实现单元格展开与隐藏
下面是一个列表单元格cell的折叠展开效果的demo。
当点击单元格时会展开该单元格,便于显示一些详情什么的。点击其他单元格原来的会关闭,同时有动画效果。
 
效果如如下:
技术分享 技术分享
代码如下:
 1 import UIKit
 2  
 3 class ViewController: UIViewController,UITableViewDelegate,
 4 UITableViewDataSource {
 5      
 6     var tableView:UITableView?
 7      
 8     var ctrlnames:[String] = ["UILabel 标签","UIButton 按钮","UIDatePiker 日期选择器",
 9         "UITableView 表格视图"]
10      
11     var selectedCellIndexPath:NSIndexPath!
12      
13     override func viewDidLoad() {
14         super.viewDidLoad()
15          
16         //创建表视图
17         self.tableView = UITableView(frame: UIScreen.mainScreen().applicationFrame,
18             style:UITableViewStyle.Plain)
19         self.tableView!.delegate = self
20         self.tableView!.dataSource = self
21         //创建一个重用的单元格
22         self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "SwiftCell")
23         self.view.addSubview(self.tableView!)
24     }
25      
26     //在本例中,只有一个分区
27     func numberOfSectionsInTableView(tableView: UITableView!) -> Int {
28         return 1;
29     }
30      
31     //返回表格行数(也就是返回控件数)
32     func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
33         return self.ctrlnames.count
34     }
35      
36     //创建各单元显示内容(创建参数indexPath指定的单元)
37     func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
38         -> UITableViewCell
39     {
40         var label =  UILabel(frame:CGRectZero)
41         label.setTranslatesAutoresizingMaskIntoConstraints(false)
42         label.text = self.ctrlnames[indexPath.row]
43          
44         var textview=UITextView(frame:CGRectZero)
45         textview.setTranslatesAutoresizingMaskIntoConstraints(false)
46         textview.textColor = UIColor.grayColor()
47         //演示效果,暂时写死
48         textview.text = "UIDatePicker 是一个控制器类,封装了 UIPickerView,但是他是UIControl的子类,"
49          
50         let identify:String = "SwiftCell"
51         var cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier:identify)
52         //自动遮罩不可见区域,超出的不显示
53         cell.layer.masksToBounds = true
54         cell.contentView.addSubview(label)
55         cell.contentView.addSubview(textview)
56          
57         //创建一个控件数组
58         var views:NSMutableDictiOnary= NSMutableDictionary()
59         views.setValue(label, forKey: "label")
60         views.setValue(textview, forKey: "textview")
61         cell.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
62             "H:|-15-[label]-15-|", options: nil, metrics: nil, views: views))
63         cell.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
64             "H:|-15-[textview]-15-|", options: nil, metrics: nil, views: views))
65         cell.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
66             "V:|[label(40)]", options: nil, metrics: nil, views: views))
67         cell.contentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
68             "V:|-40-[textview(80)]", options: nil, metrics: nil, views: views))
69         return cell
70     }
71      
72     // UITableViewDelegate 方法,处理列表项的选中事件
73     func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!)
74     {
75         self.tableView!.deselectRowAtIndexPath(indexPath, animated: false)
76         selectedCellIndexPath = indexPath
77         // Forces the table view to call heightForRowAtIndexPath
78         tableView!.reloadRowsAtIndexPaths([indexPath],
79             withRowAnimation: UITableViewRowAnimation.Automatic)        
80     }
81     
82     //点击单元格会引起cell高度的变化,所以要重新设置
83     func tableView(tableView: UITableView,
84         heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
85             if(selectedCellIndexPath != nil && selectedCellIndexPath == indexPath){
86                 return 120
87             }
88             return 40
89     }
90 }
 

iOS开发——UI_swift篇&UITableView实现单元格展开与隐藏


推荐阅读
  • 线段树,注 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • 本文介绍了如何在 Qt 应用程序中实现状态栏、浮动窗口(铆接部件)和中心部件。通过简单的代码示例,详细解释了每个组件的创建和设置方法。 ... [详细]
  • 本文介绍了如何使用Postman构建和发送HTTP请求,包括四个主要部分:方法(Method)、URL、头部(Headers)和主体(Body)。特别强调了Body部分的重要性,并详细说明了不同类型的请求体。 ... [详细]
  • iOS snow animation
    CTSnowAnimationView.hCTMyCtripCreatedbyalexon1614.Copyright©2016年ctrip.Allrightsreserved.# ... [详细]
  • 如何解决TS1219:实验性装饰器功能可能在未来版本中更改的问题
    本文介绍了两种方法来解决TS1219错误:通过VSCode设置启用实验性装饰器,或在项目根目录下创建配置文件(jsconfig.json或tsconfig.json)。 ... [详细]
  • packagecom.panchan.tsmese.utils;importjava.lang.reflect.ParameterizedType;importjava.lang. ... [详细]
  • 本文介绍了一种支付平台异步风控系统的架构模型,旨在为开发类似系统的工程师提供参考。 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 本文介绍了 Confluence 6 中使用的其他 Cookie,这些 Cookie 主要用于存储产品的基本持久性和用户偏好设置,以提升用户体验。 ... [详细]
  • 第七卷《英才》强调,即使有良药,若不对症,效果也不如低等药物;即使有贤才,若不适用,效果也不如普通人。文中通过多个比喻,阐述了人才使用的重要性,指出合适的人才在适当的时间和场合才能发挥最大效用。 ... [详细]
  • 蒜头君的倒水问题(矩阵快速幂优化)
    蒜头君将两杯热水分别倒入两个杯子中,每杯水的初始量分别为a毫升和b毫升。为了使水冷却,蒜头君采用了一种特殊的方式,即每次将第一杯中的x%的水倒入第二杯,同时将第二杯中的y%的水倒入第一杯。这种操作会重复进行k次,最终求出两杯水中各自的水量。 ... [详细]
  • 经过一年的思考,我发现自己对开发的兴趣并不浓厚,而对算法研究则更加热衷。本文将探讨开发与算法之间的本质差异,并分享我的未来学习计划。 ... [详细]
  • 本文介绍了Java编程语言的基础知识,包括其历史背景、主要特性以及如何安装和配置JDK。此外,还详细讲解了如何编写和运行第一个Java程序,并简要介绍了Eclipse集成开发环境的安装和使用。 ... [详细]
  • 使用 Git Rebase -i 合并多个提交
    在开发过程中,频繁的小改动往往会生成多个提交记录。为了保持代码仓库的整洁,我们可以使用 git rebase -i 命令将多个提交合并成一个。 ... [详细]
author-avatar
xiejiahui62484
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有