首页 > 其他分享 >iOS开发- tableView的协议

iOS开发- tableView的协议

时间:2024-11-13 09:41:17浏览次数:1  
标签:NSInteger 协议 tableView section iOS UITableView indexPath

在使用 UITableView 时,必须实现的协议主要包括以下几个

1. UITableViewDataSource 协议

这是最重要的协议,用于提供数据给 UITableView。没有这个协议,UITableView 是无法显示任何内容的。

必须实现的方法:

  • tableView:numberOfRowsInSection::返回给定 section 中的行数。

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
    
  • tableView:cellForRowAtIndexPath::返回对应 indexPath 的单元格(UITableViewCell)。

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
    

这两个方法是 UITableViewDataSource 协议中最核心的必须实现的方法。

可选的方法:

  • tableView:titleForHeaderInSection::返回指定 section 的标题(用于表头)。

    - (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;
    
  • tableView:titleForFooterInSection::返回指定 section 的标题(用于表尾)。

    - (nullable NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;
    
  • tableView:canEditRowAtIndexPath::指示是否允许编辑某一行。

    - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;
    
  • tableView:canMoveRowAtIndexPath::指示是否允许移动某一行。

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

2. UITableViewDelegate 协议

UITableViewDelegate 协议用于处理表视图的交互,例如行选择、行删除、行移动等。这个协议的实现通常是为了增强用户体验。

必须实现的方法:

实际上,UITableViewDelegate 中并没有严格“必须”实现的方法,但是通常会实现以下几种常见方法:

  • tableView:didSelectRowAtIndexPath::当用户点击某一行时调用。

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
    

可选的方法:

  • tableView:heightForRowAtIndexPath::设置行高。

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
    
  • tableView:heightForHeaderInSection::设置表头的高度。

    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
    
  • tableView:heightForFooterInSection::设置表尾的高度。

    - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
    
  • tableView:viewForHeaderInSection::自定义表头视图。

    - (nullable UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
    
  • tableView:viewForFooterInSection::自定义表尾视图。

    - (nullable UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;
    
  • tableView:didDeselectRowAtIndexPath::当用户取消选择某一行时调用。

    - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath;
    

3. UITableViewDragDelegateUITableViewDropDelegate(iOS 11 及以上)

这些协议主要用于拖放操作(drag and drop)功能,适用于需要支持拖动排序或拖拽添加数据的表格。

  • UITableViewDragDelegate:用于处理行拖拽操作。
  • UITableViewDropDelegate:用于处理行的接收(drop)操作。

这些协议方法在使用拖放功能时非常有用,但它们是可选的,只在支持拖放操作时才需要实现。

4. UITableViewDataSourcePrefetching(iOS 10 及以上)

如果表格需要进行数据预加载,UITableViewDataSourcePrefetching 协议非常有用。这个协议允许提前加载即将显示的行的数据(例如,提前加载图片或远程数据)。

  • tableView:prefetchRowsAtIndexPaths::预加载数据的方法。

    - (void)tableView:(UITableView *)tableView prefetchRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths;
    
  • tableView:cancelPrefetchingForRowsAtIndexPaths::取消预加载的数据的方法。

    - (void)tableView:(UITableView *)tableView cancelPrefetchingForRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths;
    

总结

  • 必需的协议

    • UITableViewDataSource:主要负责提供数据。
    • UITableViewDelegate:主要负责处理交互(例如行的选择、编辑、行高等)。
  • 可选的协议

    • UITableViewDragDelegateUITableViewDropDelegate(用于拖放操作)。
    • UITableViewDataSourcePrefetching(用于数据预加载)。

大部分时候,只需要实现 UITableViewDataSourceUITableViewDelegate 中的几个关键方法。如果还需要自定义其他功能(例如拖放、数据预加载),可以根据需求再实现其他协议的方法。

而使用UIcollectionView也是相同的。

标签:NSInteger,协议,tableView,section,iOS,UITableView,indexPath
From: https://www.cnblogs.com/jianqiu/p/18543166

相关文章

  • HarmonyOS蓝牙串口协议(SPP)详解:实现设备间可靠数据交换
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在智能设备互联互通的世界里,蓝牙技术扮......
  • 了解Axios:初学者看懂这篇博客就够了
    目录1.引言没有Axios时的HTTP请求使用Axios发送HTTP请求2.什么是Axios?3.安装Axios4.发送GET请求5.发送POST请求6.处理请求和响应7.取消请求8.结论1.引言        在现代Web开发中,与服务器进行数据交换是必不可少的。Axios是一个流行的JavaScript......
  • WebSocket协议如何在实时行情接口中发挥作用?
    Python股票接口实现查询账户,提交订单,自动交易(1)Python股票程序交易接口查账,提交订单,自动交易(2)股票量化,Python炒股,CSDN交流社区>>>WebSocket协议的基础概念定义与特性WebSocket协议是一种网络通信协议。它的特性在于能在单个TCP连接上进行全双工通信。与传统的HTTP协......
  • 常用的物联网消息队列-Mqtt协议
    EMQX和Mosquitto都是广泛使用的MQTT消息代理,但它们在设计目标、功能和适用场景上有一些显著的区别。Emqx使用教程添加依赖<dependency><groupId>org.eclipse.paho</groupId><artifactId>org.eclipse.paho.client.mqttv3</artifactId><version>1.2.5</......
  • arping——通过发送ARP协议报文测试网络
    转自于:https://github.com/jaywcjlove/linux-command,后不赘述arping通过发送ARP协议报文测试网络补充说明arping命令是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包,通过ping命令检查设备上的硬件地址。能够测试一个ip地址是否是在网络上已经被使用,并能够获取更......
  • 星源能投携手成都颐泰与英创力成功签署16MWh储能合作协议,助力智慧储能布局
    2024年11月,星源能投与成都颐泰携手,在四川英创力电子科技股份有限公司总部成功举行16MWh储能合作签约仪式。此次合作标志着星源能投与成都颐泰对西南地区储能需求的深入布局与支持。项目概况四川英创力电子科技股份有限公司成立于2011年,总部位于国家级遂宁经济技术开发区,是......
  • ISUP协议视频平台EasyCVR视频设备轨迹回放平台视频监控存储知识介绍:常见的几种磁盘阵
    在现代信息技术快速发展的今天,数据存储和视频监控技术的重要性日益凸显。RAID技术作为数据存储领域的一项关键技术,以及EasyCVR视频融合云平台作为视频监控管理的核心工具,它们的发展和应用对于保障数据安全、提高监控效率具有重要意义。本文将详细介绍RAID技术中的几种主流级别,以及......
  • 网络安全协议系列(非常详细),零基础入门到精通,看这一篇就够了
    文章目录一、安全协议的引入1.TCP/IP协议族中普通协议的安全缺陷1.信息泄露2.信息篡改3.身份伪装4.行为否认2.网络安全需求二、网络安全协议的定义三、构建网络安全协议所需的组件1.加密与解密2.消息摘要3.消息验证码4.数字签名5.密钥管理1.建立共享密钥2.公钥管理四......
  • APR协议及防御(非常详细),零基础入门到精通,看这一篇就够了
    文章目录ARP广播与广播域概述ARP协议(网络层)ARP出现原因原理:ARP攻击方式:ARP防御1️⃣网络安全/黑客零基础入门①学习路线②路线对应学习视频2️⃣视频配套资料&国内外网安书籍、文档①文档和书籍资料②网络安全/黑客学习视频3️⃣网络安全源码合集+工具包4️⃣网络安全......
  • USB、CAN、CAN FD、SPI、IIC、UART常见的通信协议简介
    USB、CAN、CANFD、SPI、IIC、UART都是常见的通信协议,它们在许多领域都有广泛的应用。以下是对这些通信协议的详细介绍:USB(通用串行总线)定义:USB(UniversalSerialBus)是一种计算机与外围设备进行数据交互的通信协议。版本与速度:常用的版本有USB2.0(480Mbps)和USB3.0(速率更高)。......