我设置了一些代码,prepare(for segue:)
用于将信息从当前tableviewcontroller传递到目标tableviewcontroller。这个准备用于当选择表中的任何单元格时,但是,这不是该视图控制器的唯一segue。还有其他的segue来自点击的按钮,但我认为我设置信息传递的方式对于任何segue都是通用的......这意味着当单击按钮segues时,应用程序的代码设置方式是期待的从单元格的segue中看到VC。因为它没有应用程序崩溃。我如何设置我的代码,以便准备功能不是任何故事板segue(我认为目前是)的一般情况,而是特别是细胞segue?这是当前的设置:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let indexPath = self.tableView.indexPathForSelectedRow
let rowSelectedd = indexPath
let destViewController: MainPageCellSelectedViewController = segue.destination as! MainPageCellSelectedViewController
destViewController.rowSelected = rowSelectedd!
}
var rowSelectedd = IndexPath()
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "cellSelected", sender: rowSelectedd)
}
我认为问题是(如果我错了,请纠正我)for segue: UIStoryboardSegue
不具体,但我不知道如何在那里设置标识符。
答案 0 :(得分:3)
如果您正确配置了这个,则segue有一个用于此目的的标识符。检查标识符,如果它是错误的,请退出:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard segue.identifier == "cellSelected" else {return}
// ...
}
答案 1 :(得分:1)
你可以使用标识符,但我讨厌使用字符串标识符,而且它不是很开心。我发现我几乎总是通过使用 as?检查目标viewcontroller的类型以及是的发件人类型或(如在乘法UIButtons的情况下)来消除segue的歧义)运营商=== 。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destination = segue.destination as? DetailViewController {
if sender is UITableViewCell {
destination.mode = .view
} else if sender === plusButton {
destination.mode = .add
} else if sender === editButton {
destination.mode = .edit
}
}
}