override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cellText: String
//need this to give the category which is clicked to the main view controller
// so its sends the data from one tableview to the other
let categories = cat[indexPath.row]
cellText = categories.cat!
let choosenCategory = cellText
self.performSegue(withIdentifier: "goToTableView", sender: choosenCategory)
let user = "Anton"
self.performSegue(withIdentifier: "goToTableView", sender: user)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "goToTableView")
{
let destination = segue.destination as? ViewController
destination?.passedData = sender as? String
print("open second one")
destination?.passedUser = sender as? String
print("Sender Vlaue: \(sender)")
}
}
嘿,那里!
我需要一些帮助。我想在tableviewcontroller
s。之间传递数据
我的问题是,当我在这两者之间传递数据时,它会打开两次。因此,首先它会Controller
加载passedData
,然后加载passedUser
。
我做错了什么?
答案 0 :(得分:0)
您的问题是您要拨打performSegue(withIdentifier:sender:)
两次。每次调用都会创建一个新的目标viewController。您需要在一次通话中传递设置数据。
一种选择是更新viewController中的属性以保存值,而不是将数据作为sender
发送。
另一种方法是创建一个结构来保存值。如果您有各种类型的变量,这将很有效。
由于您只有两段数据而且它们都是String
,因此您可以在[String]
中传递这些数据:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cellText: String
//need this to give the category which is clicked to the main view controller
// so its sends the data from one tableview to the other
let categories = cat[indexPath.row]
cellText = categories.cat!
let choosenCategory = cellText
let user = "Anton"
self.performSegue(withIdentifier: "goToTableView", sender: [chosenCategory, user])
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "goToTableView"
{
guard let destination = segue.destination as? ViewController else { return }
guard let info = sender as? [String] else { return }
destination.passedData = info[0]
destination.passedUser = info[1]
print("Sender Value: \(sender)")
}
}