Xcode中多个Segues中通过UITableViews传递数据(三个Segues)
Posted
技术标签:
【中文标题】Xcode中多个Segues中通过UITableViews传递数据(三个Segues)【英文标题】:Passing Data Through UITableViews In Multiple Segues in Xcode (Three Segues) 【发布时间】:2017-04-27 03:38:53 【问题描述】:我的设置是三个视图控制器,前两个带有 UITableView,第三个带有图像。
Layout
我想通过使用 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。任何想法我做错了什么?非常感谢您的帮助!
【参考方案1】:
FirstViewController
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
performSegue(withIdentifier: "identifier1", sender: self.candy[indexPath.section])
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if segue.identifier == "identifier1"
let goNext = segue.destination as! SecondViewController
goNext.showCandy = sender as! String
第二视图控制器
var showCandy = ""
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
performSegue(withIdentifier: "identifier2", sender: self.flavors[indexPath.section])
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if segue.identifier == "identifier2"
let goNext = segue.destination as! ThirdViewController
goNext.showCandy = showCandy
goNext.showFlavor = sender as! String
第三视图控制器
var showCandy = ""
var showFlavor = ""
override func viewDidLoad()
super.viewDidLoad()
print(showCandy)
print(showFlavor)
【讨论】:
谢谢@iParesh。这完全回答了我的问题。你摇滚!以上是关于Xcode中多个Segues中通过UITableViews传递数据(三个Segues)的主要内容,如果未能解决你的问题,请参考以下文章
不确定将代码放在程序中的啥位置。如何在 XCode 中通过触摸生成圆圈。 (目标-C)