如何为特定segue特定的segue做准备?

时间:2016-11-17 21:52:46

标签: swift segue

我设置了一些代码,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不具体,但我不知道如何在那里设置标识符。

2 个答案:

答案 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
       }
    }
}