iOS-列表视图

news/2024/10/6 2:07:03/文章来源:https://www.cnblogs.com/zjq1999/p/18284230

在iOS开发中,UITableView和UICollectionView是两个非常核心的用于展示集合数据的UI组件。它们都能以列表的形式展示数据,但各自的特点和使用场景有所不同。

UITableView

UITableView用于展示和管理垂直滚动的单列数据列表。它是以行的形式展示数据,每行(cell)可以展示相同或不同类型的数据。UITableView广泛用于展示数据集合,如联系人列表、设置菜单、视频音乐列表等。

基本组成

  • UITableViewDataSourceUITableView的数据源,负责提供表格数据。它是一个协议,任何实现了该协议的对象都可以作为UITableView的数据源。主要方法包括提供行数、单元格(cell)内容等。
  • UITableViewDelegate:处理用户与UITableView交互的事件,如选择某行、设置行高等。它也是一个协议。
  • UITableViewCell:表格的行,是显示数据的单元格。可以自定义单元格的样式、添加视图等。

基本使用

  1. 创建UITableView:可以通过Storyboard拖拽或代码创建。

    UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
    [self.view addSubview:tableView];
    
  2. 设置数据源和代理

    tableView.dataSource = self;
    tableView.delegate = self;
    
  3. 实现UITableViewDataSource方法:最基本的有两个方法,分别是提供行数和单元格内容。

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {// 返回行数return 10;
    }- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {// 为每行创建或重用UITableViewCell对象static NSString *cellIdentifier = @"Cell";UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];if (cell == nil) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];}// 配置cell...cell.textLabel.text = [NSString stringWithFormat:@"Row %ld", (long)indexPath.row];return cell;
    }
    
  4. 实现UITableViewDelegate方法(可选):例如,处理行的选择事件。

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {NSLog(@"Selected row at index path: %@", indexPath);
    }
    

自定义UITableViewCell

为了展示更丰富的内容,您可能需要自定义UITableViewCell。这可以通过Storyboard设计或代码实现。自定义单元格允许您在单元格中添加图片、标签、按钮等UI组件,以满足复杂的布局需求。

ICollectionView

UICollectionView用于展示和管理数据集合的有序排列。与UITableView相比,UICollectionView提供了更高的自定义能力,支持多列数据展示,以及各种复杂的布局,如网格视图、瀑布流、旋转木马等。

基本概念

  • UICollectionView:一个用于展示数据集合的滚动视图,可以高度自定义其布局。
  • UICollectionViewCellUICollectionView中的单元格,用于展示数据项。可以自定义单元格来展示复杂的布局。
  • UICollectionViewLayout:定义了UICollectionView中单元格的组织和排列方式。UICollectionViewFlowLayout是一个预定义的布局,支持网格和线性布局。
  • DataSource (UICollectionViewDataSource):提供UICollectionView所需的数据,如单元格的数量和内容。
  • Delegate (UICollectionViewDelegate):处理UICollectionView中的用户交互事件,如单元格的选择。
  • DelegateFlowLayout (UICollectionViewDelegateFlowLayout):一个可选的协议,用于调整布局属性,如单元格的大小和间距(仅在使用UICollectionViewFlowLayout时)。

基本使用步骤

  1. 创建UICollectionView:可以通过Storyboard或代码创建。如果是通过代码创建,需要指定一个布局对象。

    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:self.view.bounds collectionViewLayout:layout];
    collectionView.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:collectionView];
    
  2. 注册单元格:在使用单元格之前,需要注册单元格类或nib。

    [collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
    
  3. 设置DataSource和Delegate

    collectionView.dataSource = self;
    collectionView.delegate = self;
    
  4. 实现DataSource方法:提供必要的数据信息,如单元格的数量和如何配置每个单元格。

    - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {return 20; // 返回单元格数量
    }- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];// 配置cell...return cell;
    }
    
  5. 实现Delegate方法(可选):处理用户交互,如单元格的选择。

    - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {NSLog(@"Selected item at section %ld, item %ld", (long)indexPath.section, (long)indexPath.item);
    }
    

自定义布局

UICollectionView的强大之处在于其布局的高度可定制性。你可以通过继承UICollectionViewLayout或其子类UICollectionViewFlowLayout来创建自定义布局。自定义布局允许你控制单元格的排列方式、方向、大小和间距等。

示例:使用UICollectionViewFlowLayout

UICollectionViewFlowLayout是一个预定义的布局,支持创建网格和水平滚动的布局。通过调整其属性,如itemSizeminimumLineSpacingminimumInteritemSpacing,可以快速实现基本的布局需求。

UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.itemSize = CGSizeMake(100, 100); // 设置单元格大小
layout.minimumLineSpacing = 10; // 设置行间距
layout.minimumInteritemSpacing = 10; // 设置单元格之间的最小间距
layout.scrollDirection = UICollectionViewScrollDirectionVertical; // 设置滚动方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/738156.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CPC配光系统设计

本文详细介绍了CPC(复合抛物线聚光器)配光系统的设计过程,包括设计原理、抛物流线几何特性及其设计要求和流程,并通过Matlab和SolidWorks绘制模型,最后在TracePro中进行仿真验证,确保系统满足均匀照度和高效接收率的目标。CPC配光系统设计 CPC配光系统设计 一、设计原理 …

VMware vSphere Tanzu部署_14_部署容器应用

1.部署运行容器应用 1.1. 登录tkc集群 jianhua@napp:~/tkc$ kubectl vsphere login --server=192.168.203.194 \ --tanzu-kubernetes-cluster-name tkc-dev-cluster \ --tanzu-kubernetes-cluster-namespace tkc-01 \ --vsphere-username administrator@vsphere.local \ --ins…

贝塞尔曲线原理、推导及Matlab实现

本文详细解析了贝塞尔曲线的定义、性质、构建方法以及多种阶数的推导公式,并提供了完整的Matlab代码用于绘制和计算贝塞尔曲线。贝塞尔曲线原理、推导及Matlab实现 贝塞尔曲线原理、推导及Matlab实现 一、简介 贝塞尔曲线提出 在数学的数值分析领域中,贝塞尔曲线(English:B…

刘积仁的大健康“长跑”

软件是一个长命的产业,但软件企业的寿命都很短。懂得怕死,才能有机会活得长久。 这一次,刘积仁又为东软医疗找到了强大助力!中国通用技术(集团)控股有限责任公司(以下简称通用技术集团)所属资本公司战略投资东软集团在医疗健康领域资的创新业务公司——东软医疗,双方也由…

【AppStore】一文让你学会IOS应用上架Appstore

咱们国内现在手机分为两类,Android手机与苹果手机,现在用的各类APP,为了手机的使用安全,避免下载到病毒软件,官方都极力推荐使用手机自带的应用商城进行下载,但是国内Android手机品类众多,手机商城各式各样,做不到统一,所以Android的APP上架得一个一个平台去申请上架,…

关于airtest生成的报告中缺少poco语句问题

1、airtest生成的报告只显示airtest的相关操作,如果是poco和airtest-selenium的操作则不记录。因此需要在报告中引用插件。支持poco语句插件,poco.utils.airtest.report 支持airtest-selenium语句插件,airtest_selenium.report2、在IDE运行 .py 脚本报告生成的依据是脚本运行…

xshell7的下载ssh远程连接

1.下载地址家庭/学校免费 - NetSarang Website (xshell.com) 2.下载后一路next,来到主页面,我们来连接一下试一试吧,这里主机就是ifconfig得到的 3.用户名一般都是root密码是自己设置的那个 4.连接的时候注意比如我要连接Node1那么node1就要保持开启并却防火墙已经关闭 5.看一…

xhcms1.0

xhcms1.0 目录结构 admin --管理后台文件夹 css --存放css的文件夹 files --存放页面的文件夹 images --存放图片的文件夹 inc --存放网站配置文件的文件夹 install --网站进行安装的文件夹 seacmseditor --编辑器文件夹 te…

关于巴图自动化Profinet协议转Modbus协议网关模块怎么配置IP地址教学

Profinet协议和Modbus协议是工业通讯常用协议,通过巴图自动化PN转Modbus网关模块(BT-MDPN10)实现连接。常见的协议有:ModbusTCP协议,Profibus协议,Profibus DP协议,EtherCAT协议,EtherNET协议,CAN,CANOPEN等Profinet协议和Modbus协议是工业领域中常用的两种通讯协议,…

基础篇:Stable Diffusion 基础原理详述

【基础篇】Stable Diffusion 基础原理详述前言我认为学习 ComfyUI 应该先从理论学起。与传统绘图工具(如 Photoshop 或 Figma)相比,AI 绘图工具有着显著不同。首先,许多设置和操作在 AI 绘图工具中是非可视化的,这意味着即使你更改了某个配置,界面上也未必会有任何变化,…

微信云开发数据库连接

//.js文件const db = wx.cloud.database()Page({//页面的初始数据data: {dataObj:"" //定义对象dataObj}, //查询数据getData(){db.collection("pro1").where({ //pro1为数据库名author:"张三" …