获取 segue 的 indexPath
Get indexPath for segue
我正在尝试为某些 segue 操作获取现有单元格的 indexPath。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "EditItem" {
let controller = segue.destination as! TimerSelectViewController
controller.delegate = self
if let indexPath = tableView.indexPath(for: sender as! UITableViewCell) {
controller.itemToEdit = timers[indexPath.row]
}
}
}
我在 didSelectRowAt 中调用 segue:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
performSegue(withIdentifier: "EditItem", sender: nil)
}
但是每次我点击单元格时,我都得到 nil 并且我的应用程序崩溃了。我不明白为什么
if let indexPath = tableView.indexPath(for: sender as! UITableViewCell)
returns每次都为零。
要么你没有在 performSegue 方法中作为发送者传递任何东西,要么你传递的东西不是 UITableViewCell 的实例或其子类。
如果要求是获取所选单元格的索引路径,那么这可能是 How to get indexpath in prepareForSegue 的副本。
我的问题的答案:
我添加到 didSelectRowAt 单元格并将其放入 performSegue 的发件人中:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let cell: UITableViewCell = tableView.cellForRow(at: indexPath)!
performSegue(withIdentifier: "EditItem", sender: cell)
}
我正在尝试为某些 segue 操作获取现有单元格的 indexPath。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "EditItem" {
let controller = segue.destination as! TimerSelectViewController
controller.delegate = self
if let indexPath = tableView.indexPath(for: sender as! UITableViewCell) {
controller.itemToEdit = timers[indexPath.row]
}
}
}
我在 didSelectRowAt 中调用 segue:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
performSegue(withIdentifier: "EditItem", sender: nil)
}
但是每次我点击单元格时,我都得到 nil 并且我的应用程序崩溃了。我不明白为什么
if let indexPath = tableView.indexPath(for: sender as! UITableViewCell)
returns每次都为零。
要么你没有在 performSegue 方法中作为发送者传递任何东西,要么你传递的东西不是 UITableViewCell 的实例或其子类。
如果要求是获取所选单元格的索引路径,那么这可能是 How to get indexpath in prepareForSegue 的副本。
我的问题的答案:
我添加到 didSelectRowAt 单元格并将其放入 performSegue 的发件人中:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let cell: UITableViewCell = tableView.cellForRow(at: indexPath)!
performSegue(withIdentifier: "EditItem", sender: cell)
}