仅当 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 小于数组中的项目数,因此您的代码不会崩溃。

【讨论】:

如果由于单元格被重复使用而不满足条件,您需要一个elsetext 设置为其他适当的值。 @rmaddy 对,除非 OP 不需要任何标签文本。 这正是您需要else 的原因。细胞被重复使用。一个单元格可能有一次文本值,但稍后它可能会用于不需要文本的行上,您是否需要在else 中重置text。将其设置为空字符串或其他适当的值。 @rmaddy 是的,这就是我不需要任何文本的意思:一个空字符串。我正在编辑我的帖子。 如果数组比indexPath.row长怎么办?

以上是关于仅当 indexPath 对象可用时,如何在 tableview 单元格上使用标签的主要内容,如果未能解决你的问题,请参考以下文章

XCTestCase:使用 IndexPath 点击 collectionView 中的单元格

Swift 4.2 - 如何从 tableView 中的“didSelectRowAtIndexPath”方法调用“indexPath.row”到另一个类?

仅当 iOS11 可用时才包含类的扩展

仅当有描述可用时才提取类别描述。

Xcode Swift UICollectionView:cellForItemAt IndexPath 未调用但 numberOfItemsInSection 调用

仅当套接字上的数据可用时 pthread_create