【发布时间】:2017-04-27 03:38:53
【问题描述】:
我的设置是三个视图控制器,前两个带有 UITableView,第三个带有图像。
我想通过使用 UITableViews 的 segues 将数据从 firstViewController 传递到 secondViewController,然后将两组数据传递到 thirdViewController。
我用来从 firstViewController 传递到 secondViewController 的代码如下:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "identifier1", sender: candy[indexPath.row])
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let selectedCandy = segue.destination as? SecondViewController
selectedCandy?.showCandy = sender as? String
}
secondViewController 中的代码非常相似:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "identifier2", sender: flavors[indexPath.row])
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let selectedFlavor = segue.destination as? ThirdViewController
selectedFlavor?.showFlavor = sender as? String
}
我所做的要点是在 firstViewController UITableView 中选择一个 Candy,在 secondViewController UITableView 中选择一个 Flavor,然后在 thirdViewController 中有一个标签 FLAVOR CANDY 和选择的图像。
Flavor 的标签会显示。糖果的标签没有。如何将 Candy 的 segue 中的选择传递给 thirdViewController?
提前非常感谢。
【问题讨论】:
-
您应该将糖果传递给最后一个控制器,在第二个 VC 中的
prepareFor:sender:中。控制器应该有来自第一个 VC 的showCandy实例变量。将其传递给第三个 VC。此外,您的变量名称不是最佳的,令人困惑。 -
showCandy听起来确实像一个方法,或者Bool,它真的应该是selectedCandy。在prepareFor:sender:中,您将目标视图控制器的局部变量命名为selectedXXX,而它们确实应该采用类型名称(camelCased,如secondViewController)或至少以Controller结尾。selectedCandy听起来像是被选中的对象。 -
谢谢谢恩!快速跟进:我将 secondViewController 中的代码修改为: override func prepare(for segue: UIStoryboardSegue, sender: Any?) { let selectedFlavor = segue.destination as? ThirdViewController selectedFlavor?.showFlavor = sender as?字符串让 selectedCandy = segue.destination 为? ThirdViewController selectedCandy?.showCandy = sender as? String } 但是,现在它显示了两次 Flavor 而不是 Flavor-Candy。任何想法我做错了什么?非常感谢您的帮助!
标签: ios xcode uitableview segue identifier