我正在尝试从UITableview didSelectRowAt
方法中获取以前选择的行和当前选择的行。
didSelectRowAt
方法仅提供所选的行。
有没有办法知道在调用didSelectRowAt
之前选择了哪一行?
您只需要声明两个属性来存储以前和当前选择的行,然后在tableView(_:didSelectRowAt:)
中更新它们的值。
class TableViewController: UITableViewController {
var lastSelectedRow: IndexPath?
var currentlySelectedRow: IndexPath?
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
super.tableView(tableView, didSelectRowAt: indexPath)
lastSelectedRow = currentlySelectedRow
currentlySelectedRow = indexPath
}
}
UITableViewDelegate 协议有几种方法来帮助您管理表视图的状态。
不要缓存索引路径,因为它们很容易变得过时和无效。您的代码最终会遇到无效的 IndexPath,并且在使用无效对象时应用程序将崩溃。
相反,请使用通知您将选择哪一行的方法。在willSelectRowAt
中,您可以通过调用 indexPathForSelectedRow 来获取表视图的当前选择状态,并对选择信息执行所需的操作。
class TableViewController: UITableViewController {
override func tableView(UITableView, willSelectRowAt: IndexPath) -> IndexPath? {
let selectedIndexPath = self.tableView.indexPathForSelectedRow()
// Do something with the selected path
}
}