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

时间:2017-11-13 11:02:59

标签: ios swift uitableview row indexpath

我正在尝试在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有很多行,并且可滚动内容,那么最后一行是不可见的。 因此,在我的cellForRow中,我这样做:

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

它正在工作,除了想象我的屏幕可以显示6行,但我的tableView的总行数是15。 它将在indexPath 5和15的行上应用我的特定操作。

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

如果只在最后一行显示自定义操作,即使它不可见,该怎么办?

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

4 个答案:

答案 0 :(得分:0)

您可以尝试使用tableview委托方法:

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

答案 1 :(得分:0)

在行方法

的单元格中尝试此代码
if indexPath.row == yourarray.count - 1{

                // Put your code

        }

答案 2 :(得分:0)

你可以在UITableview代表中处理Tap Action,如下所示:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
    {
      if arrTblData.count >= 1{
        if (arrTblData.count - 1) == indexPath.row{
            //Here you can handle Action for last index
       }
  }
}

答案 3 :(得分:0)

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

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

中执行
  

func tableView(_ tableView:UITableView,               willDisplay cell: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
    }
}

您可以通过apple docs了解有关tableview委托方法的更多信息