仅当 indexPath 对象可用时,如何在 tableview 单元格上使用标签
Posted
技术标签:
【中文标题】仅当 indexPath 对象可用时,如何在 tableview 单元格上使用标签【英文标题】:How to use a label on a tableview cell only IF an indexPath object is available 【发布时间】:2018-02-02 22:39:59 【问题描述】:我有一个表格视图,每个单元格中有两个标签。一个显示数组中的对象,另一个显示先前创建的另一个数组中的相应对象。
presentArray: [item1, item2, item3]
previousArray: [item1, item2, item3, item4]
numberOfRowsInSection 返回 presentArray.count
在cellForRowAt中我需要设置一个标签来显示previousArray的对应索引。这就是崩溃发生的地方。数组可以根据它们的性质具有不同的长度。
那么,我怎样才能告诉 tableview 单元格仅在它存在时才显示前一个数组中的字符串。
如果数组长度相同,我目前只能在标签中显示字符串,否则我会因为 indexPath 超出范围(更长或更短)而崩溃。
如果索引路径存在,我怎么说 cell.label.text = "array[indexPath.row]"。
【问题讨论】:
如果您需要这样的检查,那么您就有了设计问题。您最好更新您的问题,显示您的numberOfRowsInSection
方法以及您的 cellForRowAt
。
谢谢你们,我已经更新以显示 numberOfRowsInSection 和 cellForRowAt
【参考方案1】:
在设置标签文本之前,您可以使用if
条件,如下所示:
if indexPath.row < previousArray.count
cell.label.text = array[indexPath.row]
else
cell.label.text = ""
此代码检查以确保 tableview 的 indexPath.row 小于数组中的项目数,因此您的代码不会崩溃。
【讨论】:
如果由于单元格被重复使用而不满足条件,您需要一个else
将text
设置为其他适当的值。
@rmaddy 对,除非 OP 不需要任何标签文本。
这正是您需要else
的原因。细胞被重复使用。一个单元格可能有一次文本值,但稍后它可能会用于不需要文本的行上,您是否需要在else
中重置text
。将其设置为空字符串或其他适当的值。
@rmaddy 是的,这就是我不需要任何文本的意思:一个空字符串。我正在编辑我的帖子。
如果数组比indexPath.row长怎么办?以上是关于仅当 indexPath 对象可用时,如何在 tableview 单元格上使用标签的主要内容,如果未能解决你的问题,请参考以下文章
XCTestCase:使用 IndexPath 点击 collectionView 中的单元格
Swift 4.2 - 如何从 tableView 中的“didSelectRowAtIndexPath”方法调用“indexPath.row”到另一个类?
Xcode Swift UICollectionView:cellForItemAt IndexPath 未调用但 numberOfItemsInSection 调用