Ios 使用didSelectRowAt通过segue传递数据

Ios 使用didSelectRowAt通过segue传递数据,ios,swift,uitableview,segue,Ios,Swift,Uitableview,Segue,我想通过segue将数据从UITableViewController传递到ViewController。问题是我要传递的数据是indexPath.row值(即在UITableView中选择的行) 我在ViewController中声明了一个变量var counter:Int?,它被称为foodinfo。这是我在UITableView中的代码: var rowselected: Int? override func viewDidLoad() { super.viewDidLoad()

我想通过segue将数据从UITableViewController传递到ViewController。问题是我要传递的数据是
indexPath.row
值(即在UITableView中选择的行)

我在ViewController中声明了一个变量
var counter:Int?
,它被称为
foodinfo
。这是我在UITableView中的代码:

var rowselected: Int?

override func viewDidLoad() {
    super.viewDidLoad()

}

//what happens when row is selected
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    rowselected = indexPath.row

    func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let destinationVC = segue.destination as! foodinfo
        destinationVC.counter = rowselected
    }

    self.performSegue(withIdentifier: "dayx", sender: self)
    }

由于某些原因,ViewController中的
计数器的值为nil。我做错了什么?

您的
准备继续
不应该在
覆盖函数表视图中(
移动它,使其如下所示:

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

rowselected = indexPath.row
self.performSegue(withIdentifier: "dayx", sender: self)

}
还应包括:

   override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
     if segue.identifier == "dayx" {
    let destinationVC = segue.destination as! foodinfo
    destinationVC.counter = rowselected
    }
}

由于在
self.performsgue
之后调用了
override func prepareforsgue
方法。因此,现在您可以在
override func tableView中成功设置值
rowSelected=indexPath.row
当调用
self.performsgue
时,它将正确传递在
覆盖函数prepareforsgue
prepareforsgue
中设置的数据,该
prepareforsgue
应位于
didSelectRowAt
之外,并且无需声明您可以使用的var
sender

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {  
    self.performSegue(withIdentifier: "dayx", sender:indexPath.row)
}      
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let destinationVC = segue.destination as! foodinfo
    destinationVC.counter = sender as! Int
}

为什么
prepare
处于
didSelectRowAt
重载状态?感谢您试一试,但foodinfo viewcontroller中的计数器仍然显示为nil。似乎由于某种原因计数器没有被更新。确保您从vc本身而不是从celltry
destinationVC.counter=self.rowselected
挂接序列,如果您没有我们仍然在使用它。如果我从vc本身分离,它会产生一个SIGBRT错误,而如果我从单元格分离,它似乎进入foodinfo,但会为计数器产生一个nil。@Petrrupper它会产生counter=nil。