Ios 使用didSelectRowAt通过segue传递数据
我想通过segue将数据从UITableViewController传递到ViewController。问题是我要传递的数据是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()
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本身而不是从celltrydestinationVC.counter=self.rowselected
挂接序列,如果您没有我们仍然在使用它。如果我从vc本身分离,它会产生一个SIGBRT错误,而如果我从单元格分离,它似乎进入foodinfo,但会为计数器产生一个nil。@Petrrupper它会产生counter=nil。