Swift - 动态添加删除TableView的单元格(以及内部元件)

Swift - 动态添加删除TableView的单元格(以及内部元件),第1张

概述在Swift开发中,我们有时需要动态的添加或删除列表的单元格。   比如我们做一个消息提醒页面,默认页面只显示两个单元格。当点击第二个单元格(时间标签)时,下面会再添加一个单元格放置日期选择控件(同时新增单元格的高度也会变化)。而再次点击第二个单元格,日期选择控件又会隐藏。     import  UIKit   class  MyTableViewController :  UITableVie 在Swift开发中,我们有时需要动态的添加或删除列表的单元格。
比如我们做一个消息提醒页面,默认页面只显示两个单元格。当点击第二个单元格(时间标签)时,下面会再添加一个单元格放置日期选择控件(同时新增单元格的高度也会变化)。而再次点击第二个单元格,日期选择控件又会隐藏。

import UIKit class MytableVIEwController : UItableVIEwController { @IBOutlet weak var dueDateLabel: UILabel ! //日期选择器显示状态 datePickerVisible: Bool = false overrIDe func vIEwDIDLoad() { super .vIEwDIDLoad() self .Title = "添加任务" //去除尾部多余的空行 .tableVIEw.tableFooterVIEw = UIVIEw (frame: CGRectZero ) } dIDReceiveMemoryWarning() { .dIDReceiveMemoryWarning() } //选择cell的row之后 tableVIEw(tableVIEw: UItableVIEw ,dIDSelectRowAtIndexPath indexPath: NSIndexPath ) { .tableVIEw.deselectRowAtIndexPath(indexPath,animated: true ) //当执行到日期选择器上一行的时候,可以判断是否要显示日期选择器了 if indexPath.section == 0 && indexPath.row == 1{ !datePickerVisible{ .showDatePicker() } else { .hIDeDatePicker() } } println (indexPath.row) } //显示日期选择器 showDatePicker(){ //日期选择器的状态设为打开 datePickerVisible = true let indexPathDatePicker = (forRow: 2,inSection: 0) .tableVIEw.insertRowsAtIndexPaths([indexPathDatePicker], withRowAnimation: UItableVIEwRowAnimation . automatic ) } //隐藏日期选择器 hIDeDatePicker(){ datePickerVisible { //日期选择器的状态设为关闭 false .tableVIEw.deleteRowsAtIndexPaths([indexPathDatePicker], Fade ) } } numberOfSectionsIntableVIEw(tableVIEw: ) -> Int { return 1 } @H_90_301@ //设置cell ) -> UItableVIEwCell { //因为日期选择器的位置在日期显示Label下面。它的位置就是第2个section 和第3个row indexPath.section == 0 && indexPath.row == 2{ //用重用的方式获取标识为DatePickerCell的cell cell = tableVIEw.dequeueReusableCellWithIDentifIEr( "DatePickerCell" ) as ? //如果没找到就创建一个 cell == nil { //创建一个标识为DatePickerCell的cell cell = (style: UItableVIEwCellStyle Default ) //设置cell的样式 cell?.selectionStyle = UItableVIEwCellSelectionStyle None //创建日期选择器 datePicker = UIDatePicker CGRectMake (0.0,0.0,320.0,216.0)) //给日期选择器的tag datePicker.tag = 100 //将日期选择器区域设置为中文,则选择器日期显示为中文 datePicker.locale = NSLocale (localeIDentifIEr: "zh_CN" ) //将日期选择器加入cell cell?.contentVIEw.addSubvIEw(datePicker) //注意:action里面的方法名后面需要加个冒号“:” datePicker.addTarget( "dateChanged:" UIControlEvents ValueChanged ) } cell! { return .tableVIEw(tableVIEw,cellForRowAtIndexPath: indexPath) } } //日期选择器响应方法 dateChanged(datePicker : ){ //更新提醒时间文本框 formatter = NSDateFormatter () //日期样式 formatter.dateFormat = "yyyy年MM月dd日 HH:mm:ss" .dueDateLabel.text = formatter.stringFromDate(datePicker.date) } //根据日期选择器的隐藏与否决定返回的row的数量 { section == 0 && datePickerVisible{ 3 { } } //因为日期选择器插入后会引起cell高度的变化,所以要重新设置 heightForRowAtIndexPath indexPath: ) -> CGfloat { //当渲染到达日期选择器所在的cell的时候将cell的高度设为217 indexPath.section == 0 && indexPath.row == 2{ 216.0 { } } //当覆盖了静态的cell数据源方法时需要提供一个代理方法。 //因为数据源对新加进来的日期选择器的cell一无所知,所以要使用这个代理方法 indentationLevelForRowAtIndexPath indexPath: { indexPath.section == 0 && indexPath.row == 2{ //当执行到日期选择器所在的indexPath就创建一个indexPath然后强插 newIndexPath = (forRow: 0,inSection: indexPath.section) { } } }
总结

以上是内存溢出为你收集整理的Swift - 动态添加删除TableView的单元格(以及内部元件)全部内容,希望文章能够帮你解决Swift - 动态添加删除TableView的单元格(以及内部元件)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1079307.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存