如何检测“真正的”最后一个表格视图单元格?

时间:2019-05-11 23:48:05

标签: ios swift

我试图绕过第一个和最后一个tableView单元的角落,但是我遇到了问题。滚动时,我的最后一个可重用的tableView单元返回了错误的indexPath.row。所以它从0到9,因为我有一个包含10个项目的数组,然后是6到9,然后是3到4。根据我的研究,我得出结论,这是因为单元被重用而发生的,但这仅在滚动时发生。点击单元格时,它会按预期返回正确的indexPath.row。

我尝试了一些解决方案,例如:

  • 显式返回单元格数量(即10)。
  • 也明确检查该部分,但这是不必要的,因为我始终只有一个部分。
  • 使用“ indexPath.row == array.count -1”或“ indexPath.row == array.count”检测最后一个单元格。

这些工作都没有,尤其是最后一项。当显示最后一个单元格时,我在断点上检查了indexPath.row并返回“ 3”,而不是我期望的9(因为我有10个单元格)。

返回单元格数:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    guard let resultsCount = results?.count else { return 0 }
    return resultsCount
}

设置单元格

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let customTableViewCell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath) as! CustomTableViewCell

    // Setup stuff
    ...

    if indexPath.row == 0 { // if first cell
        // Do something
        ...
    } else if indexPath.row == results!.count - 1 { // if last cell
        // Do something
        ...
    } else {
        // Do something
        ...
    }

    return searchResultsCell
}

也尝试过此操作,而不是在cellForRowAt中进行操作:

override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)

Image for illustration

在滚动时是否还有另一种获取最后一个单元格的实际indexPath.row的方法,这样我就可以将其倒圆角?

4 个答案:

答案 0 :(得分:2)

问题是,正如您所说,单元已被重用。当单元格的行为0时,您正在对单元格的上角进行圆角处理,但是当单元格的行为 not 零时,您忘记了对单元格的角进行 unround 。对于最后一行类似。

答案 1 :(得分:0)

我宁愿对顶部,中央和底部单元格使用3个不同的单元格重用标识符。现在,每个单元格只会用于其中一种情况。

答案 2 :(得分:-1)

您可以使用以下代码来改进您的解决方案,

from io import StringIO

string = """Hello
world!"""

X = StringIO(string)
print(X.readlines()) # Example file operation
# ['Hello\n', 'world!']

希望这对您有所帮助。

答案 3 :(得分:-2)

我重做了整个视图,现在它按预期工作了,但是不幸的是,我仍然不知道是什么引起了问题。模拟器中的错误可能不太可能发生,因为它可以在真实设备上正常运行:/