Objective-C UI之UITableView详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Objective-C UI之UITableView详解相关的知识,希望对你有一定的参考价值。

参考技术A UITableView在ios开发中占据非常重要的位置,必须熟练掌握。
学习UITableView之前,先了解一下一些基本概念:

从上面可以了解到,section和row代表一个UITableViewCell在UITableView上的位置
下面,我们创建一个UITableView:

下面是UITableView的常用属性:

rowHeight 行高
separatorStyle 分隔线样式
separatorColor 分隔线颜色
tableHeaderView UITableView的置顶视图
tableFooterView UITableView置底视图

UITableView中有两个重要的属性:dataSource(遵循UITableViewDataSource协议)和delegate(遵循UITableViewDelegate协议)
其中dataSource是和显示数据相关的代理,delegate是和视图操作相关的代理
UITableViewDataSource协议中有两个必须实现的协议方法:
1.UITableView每个分区包含的行数:

UITableView的每一个单元格是UITableViewCell类的对象,默认提供了三个视图属性:

UITableView有一个重用池机制管理Cell,目的是使用尽可能少的Cell显示所有的数据
UITableView重用Cell的流程

在创建UITableView之后,需要注册一个Cell类,当重用池中没有Cell的时候,系统可以自动创建Cell。相关方法:
[tableView registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier];(可以使用不同identifier进行多次注册)
系统提供了一个获取重用池中Cell的方法(需要一个重用标识):

1.UITableViewDataSource

2.UITableViewDelegate

流程:

注意:编辑结束后,由于numberOfRowInSection这个协议方法只在tableView添加到父视图的时候调用一次,而且table上的数据都是由数组提供,因此,需要先改变数组中的数据,然后让table的协议重新调用进行重新赋值
即先修改数据源,在刷新table(使用[table reloadData]方法刷新)

1.自定义Cell

一般而言,Cell在创建的时候的frame大小是(0,0,320,44),而我们设定的Cell的高度一般会大于44。因此:在自定义Cell中创建子视图的frame为CGRectZero。在Cell添加到tableView上的时候才给子视图设置frame,Cell添加到tableView的时候大小已经更改为tableView设定的大小,所以在自定义Cell的方法layoutSubviews中设置子视图的frame

2.Model的使用
Model类的作用主要是为我们提供数据,一般我们的数据都是存放在数组和字典中,OC中的KVC就是帮助我们将字典转换为Model类而存在的
使用步骤:

注意:Model类要重写-(void)setValue:(id)value forUndefinedKey:(NSString *)key,防止找不到和key值相同的属性时,会crash,当key值为系统关键字,可以在方法里面为对应的属性(属性名和系统关键字不冲突)赋值,比如_id = value;

3.多种Cell混合使用
不同的Cell需要使用不同的重用标识符来进行区分,而重用标识符的区分需要根据不同的情况来区分,比如:

4.自适应高度

使用 Objective-C 中的 Xcode 在 iOS 中以编程方式制作 UI 元素

【中文标题】使用 Objective-C 中的 Xcode 在 iOS 中以编程方式制作 UI 元素【英文标题】:Making UI elements programmatically in iOS using Xcode in Objective-C 【发布时间】:2020-03-09 21:12:55 【问题描述】:

我正在尝试解析 json 数据并将其转换为 iOS 中的表单。我能够成功地解析数据并显示它,但是,我想修复 UI 并使其看起来更像一个 iOS 表单,可能使用 tableviews 等。

我该如何处理?我应该只使用 tableviewController 还是使用 tableview? (这些字段是动态添加的,所以我不知道我将拥有什么类型和多少个字段,直到我调用 API 并从我得到的 json 中获取数据)

iOS 中有哪些易于使用的库可供我使用?

【问题讨论】:

欢迎来到 Stack Overflow。请使用tour 并查看How to Ask。您的第一步应该是搜索(使用谷歌或其他)ios dynamic form ... 并开始阅读。有很多方法可以做这样的事情,因此您需要查看各种方法,并根据您的预期需要,开始使用一种看起来合适的方法。 【参考方案1】:

这不是 UI 设计在 iOS 上的工作方式。对于您提到的从 API 获取 tableViewController 的具体示例...您将创建一个 tableViewController 并设计一个演示单元。

然后你将从你的 API 中获取结果,解析它。您将迭代 API 返回的结果,在该迭代中,您将以编程方式创建表格单元格(从而确保创建所需数量的表格)。

尽管如此,这是一个非常模糊的问题,除了简要解释整个事情的一般工作原理之外,如果没有您发布到目前为止的代码,我也无能为力。

请允许我将您推荐给 NSCookBook 的 this tutorial,虽然在这些事情上旧是黄金。

问候,

【讨论】:

以上是关于Objective-C UI之UITableView详解的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C - 滚动时 UISearchController 结果在 UISearchBar 上重叠

《从零开始学Swift》学习笔记(Day 69)——Swift与Objective-C混合编程之语言

《从零开始学Swift》学习笔记(Day 69)——Swift与Objective-C混合编程之语言

《从零开始学Swift》学习笔记(Day 69)——Swift与Objective-C混合编程之语言

在 Objective-C 中实现这种滚动 UI 的最佳方式是啥?

Objective-C UI之自定义轮播图控件