Swift - 当最后一行不可见时,如何在UITableView的最后一行上执行特定操作?



我正在尝试在我的UITableView的最后一行实现自定义操作。

找到了一个很好的扩展名,以便知道我是否在最后一行:

extension UITableView {
    func isLast(for indexPath: IndexPath) -> Bool {
        let indexOfLastSection = numberOfSections > 0 ? numberOfSections - 1 : 0
        let indexOfLastRowInLastSection = numberOfRows(inSection: indexOfLastSection) - 1
        return indexPath.section == indexOfLastSection && indexPath.row == indexOfLastRowInLastSection
    }
}

我面临的唯一问题是,如果我的 tableView 有很多行,内容可滚动,最后一行是不可见的。因此,在我的单元格中,我正在这样做:

if tableView.isLast(for: indexPath) {
   print("Last Row - Do Specific action")
} else {
}

它正在工作,除了假设我的屏幕可以显示 6 行,但我的 tableView 的总行数是 15。它将对索引路径 5 和 15 处的行应用我的特定操作。

我猜这是因为每次调用cellForRow时,它都会检查最后一行,并且它也适用于最后一个可见行。

如何仅在最后一行上实现自定义操作,即使它尚不可见?

编辑:经过更多调查,问题来自UITableView无法预取单元格,cellLoaded和cellVisible是相同的。

我无法复制粘贴代码,因为我现在没有 xcode。

但是,如果您想在显示单元格之前执行操作,请在

func tableView(_ tableView: UITableView, 将显示单元格:UITableViewCell, forRowAt indexPath: IndexPath(

并检查最后一行:

if indexPath.row == dataSourceArray.count - 1 {
   //Perform action
}

dataSourceArray 是从中获取数据以在单元格中显示数据的数组。

基本上你的代码应该是这样的

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
       if indexPath.row == dataSourceArray.count - 1 {
            //Perform action
    }
}

您可以通过苹果文档了解有关表视图委托方法的更多信息

您可以尝试使用表视图委托方法:

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

在单元格中尝试此代码以行方法运行

if indexPath.row == yourarray.count - 1{
                // Put your code
        }

相关内容

  • 没有找到相关文章