我想通过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中的counter
的值为nil。我在做什么错了?
答案 0 :(得分:1)
您的prepare for segue
不应放在override func tableView(
的内部,因此应这样移动:
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
}
}
因为在override func prepareForSegue
之后调用了self.performSegue
方法。因此,现在您可以在rowSelected = indexPath.row
内成功设置值override func tableView(
,并且在调用self.performSegue
时它将正确传递override func prepareForSegue
答案 1 :(得分:0)
prepareForSegue
应该在didSelectRowAt
之外,无需声明可以使用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
}