UITableViewController

2023-05-16

UITableViewController(表视图控制器)

UITableViewController继承自UIViewController. 自带了一个tableView, 其根视图就是tableView.创建UIViewVontroller运行之后并不会报错, 会出现两个警告.

我们创建了TableViewController之后会发现有很多被注释掉得代码.

第一个断点警告返回的是分组数

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

第二个断点警告返回的是行高

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

然后被注释掉得方法是创建单元格, 这个在TableView有写

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 

这个方法返回的是一个BOOL值, 表示是否允许被编辑, YES是可以, 返回NO是禁止被编辑, 默认为YES.

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

if (editingStyle == UITableViewCellEditingStyleDelete) {

        // Delete the row from the data source

        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

    } else if (editingStyle == UITableViewCellEditingStyleInsert) {

        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view

    }   

}

这里分别是一个删除和添加的方法, 但是我们在做了添加或删除后, 会发现在刷新之后数据又会回到原来的位置. 是因为这里删除或则添加的只是界面, 所以我们需要写入一下对数据添加和删除的方法.

//一定要先改变数组元素  一定要先改变数组元素  一定要先改变数组元素  重要的事情说三遍

[self.datasource removeObjectAtIndex:indexPath.row];

self.datasource insertObject:@"新数据" atIndex:indexPath.row];

在这里被创建的注释写的很严谨,  先加入数组, 然后再加入到表格中. 我们可以参照的方法写.
在viewDidLoad中, 最下面的一行是一个被注释的一个编辑按钮~! 但是我们在点击了编辑按钮之后会发现只有删除的模式. 所以我们需要为表示图的对应行指定编辑样式,. 样式是个枚举值, 有: Delete, Insert, 和None. 

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

UITableViewCellEditingStyleInsert;//添加样式

UITableViewCellEditingStyleDelete;//删除样式

但是很多用过苹果的朋友会问: 不是还有选中么?(一个圆圈, 可以打对勾)

UITableViewCellEditingStyleDelete|UITableViewCellEditingStyleInsert;//选择样式


然后是数据的移动:首先我们看这个方法:

- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath  

这个方法返回的BOOL值是说: 是否可以移动, 默认是可以的, 如果想要使某些数据不能移动, 那么我们可以指定某些数据返回NO.

之后就是具体的移动实现.

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {

将指定的数据移动. 在这里为什么我们不是用exchange 来进行交换呢? 因为移动数据之后, 相当于一个插入操作, 数据移动到指定位置后, 以前的数据会往后进行排列, 改变了index. 所以我们做的是一个插入的操作, 但是单纯的插入的话, 那么以前的数据怎么办? 所以我们是进行了删除, 然后又在指定的位置进行插入.

//1.先获取被移动的数据

id object = [self.datasource [fromIndexPath.row] retain];

//2.将该对象从数组中移除

[self.datasource removeObjectAtIndex:fromIndexPath.row];

//3.将该对象插入到指定下标

[self.datasource insertObject:object atIndex:toIndexPath.row];

//4.释放对象所有权

[object release];




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UITableViewController 的相关文章

随机推荐

  • 定时打开或关闭服务器上的软件

    部署在服务器上的软件 xff0c 会莫名其妙的停止运行 xff0c 还必须得手动关闭重启 xff0c 太麻烦啦 xff01 在大神的建议下 xff0c 做一个让软件自动关闭进程 xff0c 然后重启的操作 废话少说 xff0c 上车 第一步
  • FFmpeg

    FFmpeg是一套可以用来记录 转换数字音频 视频 xff0c 并能将其转化为流的开源计算机程序 采用LGPL或GPL许可证 它提供了录制 转换以及流化音视频的完整解决方案 它包含了非常先进的音频 视频编解码库libavcodec xff0
  • 不懂PO 设计模式?这篇实战文带你 PO

    为UI页面写测试用例时 xff08 比如web页面 xff0c 移动端页面 xff09 xff0c 测试用例会存在大量元素和操作细节 当UI变化时 xff0c 测试用例也要跟着变化 xff0c PageObject 很好的解决了这个问题 x
  • archlinux 中文本地化配置

    参考 xff1a http www wiki org 本地化配置 xff0c 其实就是设置locale 一 显示中文 要显示中文 xff0c 需要生成中文语言包和安装中文字体 1 生成中文语言包 archlinux使用locale gen脚
  • 【Ubuntu】安装Go语言

    sudo apt install golang go version
  • linux系统中使用X11 获取系统窗体信息

    在X Window System中 xff0c 每个窗口都有一个唯一的标识符 xff0c 称为窗口ID 要查找特定窗口的ID号 xff0c 可以使用Xlib库中的XQueryTree函数来获取窗口树结构 xff0c 并遍历整个树结构以查找目
  • 三维重建:多点透视cvSolvePNP的替代函数(Code)

    xfeff xfeff 在调试JNI程序时 xff0c 所有的Shell都已经加载完成 xff0c 而唯一真正核心的cv SolvePnP却不能在JNI里面获得通行证 xff0c 经过反复测试都不能运行 xff0c 因此只能忍痛舍弃 xff
  • 利用Pycharm工具将Python+Qt项目打包成exe应用程序

    博客小白第一次发博客 xff0c 已参加工作 xff0c 仅用于记录一下自己空余时间学习Python的进程 xff0c 学习过程中遇到问题也借鉴了很多博客的解决办法 xff0c 因此也想记录下自己的遇到的问题 xff0c 希望对跟我一样刚起
  • BOSS 业务运营支撑系统

    今天又简单的介绍几个概念 xff0c 我觉得要深入了解某个技术 xff0c 首先要把概念搞清楚 xff0c 这样在宏观理解上将更加深入 本人工作所属电信行业 xff0c 所以下面所介绍的几个概念都是基于电信行业的 BSS Business
  • JAVA版本:判断101-200之间有多少个素数,并输出所有素数。

    题目 xff1a 判断101 200之间有多少个素数 xff0c 并输出所有素数 程序分析 xff1a 判断素数的方法 xff1a 用一个数分别去除2到这个数 xff0c 如果至少有一个数能被整除 xff0c 则表明此数不是素数 xff0c
  • arm64架构ubuntu18.04国内镜像源

    jetson xavier nx下换国内源 xff0c 步骤如下 xff1a span class token shebang important bin bash span span class token function cp spa
  • 安装和配置OpenStack客户端(Jesse翻译)

    xfeff xfeff 安装和配置 OpenStack 客户端 xff08 Jesse 翻译 xff09 原文来自 icehouse的OpenStack文档 回忆 xff1a 在前面部分 xff0c 你已经使用了 keystone 客户端
  • 联通家庭宽带光猫DDNS设置

    1 目前家里宽带光猫ppoe拨号获取的IP全部都是非公网IP 打96169宽带专家转人工客服申请更换公网IP 一天内会有专人联系 更换成公网IP后 重启光猫 在公司或者其他地方ping下家里光猫获取到的公网IP看下是否能ping通 2 申请
  • Matlab如何抓取excell表格里的指定数据

    每次从示波器上采集的数据总是会带有示波器的相关信息 xff0c 没法直接load到matlab里 xff0c 每次手动删除让人感到疲惫 xff0c 特别是数据量达到100 43 的时候 瞬间emmm 示波器采到的数据如下图 xff1a 于是
  • nginx更改进程名称 学习笔记

    如何更改进程名称 在进入正题之前 xff0c 我们需要了解一下以下参数的作用 xff1a span class token keyword int span span class token function main span span
  • Apache 2部署SSL证书

    在Ubuntu系统Apache 2部署SSL证书 本文介绍了如何在Ubuntu系统以及Apache 2中安装阿里云SSL证书 前提条件 已从SSL证书控制台下载Apache服务器证书 已安装Open SSL 环境准备 操作系统 xff1a
  • NVDIA Jetson TX2软件介绍

    介绍 JETSON TX2 模块 它是一台基于 NVIDIA Pascal 架构的 AI 单模块超级计算机 它性能强大 xff0c 但外形小巧 xff0c 节能高效 xff0c 非常适合机器人 无人机 智能摄像机和便携医疗设备等智能终端设备
  • 12.6V/8.4V锂离子或锂聚合物电池充电器

    AL1261是一款专门为高精度的线性锂电池充电器而设计的电路 xff0c 非常适合那些低成本 便携式的充电器使用 它集高精度预充电 恒定电流充电 恒定电压充电 电池状态检测 充电结束低泄漏 充电状态指示等性能于一身 xff0c 可以广泛地使
  • import requests ModuleNotFoundError: No module named 'requests'

    错误描述 xff1a import requests ModuleNotFoundError No module named 39 requests 39 解决办法 xff1a Step 1 xff1a 打开命令窗口 xff0c Win 4
  • UITableViewController

    UITableViewController 表视图控制器 UITableViewController继承自UIViewController 自带了一个tableView 其根视图就是tableView 创建UIViewVontroller运