使用prepareForSegue传递数据

我试图将数据从viewController 1传递到viewController2,我有2个按钮和1个segue(因此有一个segue标识符)用于这两个按钮,每个按钮按下时应显示:1个标签显示标题,1个textView显示定义,我很难显示每个单词的数据; 我知道它必须是在performSegueWithIdentifier中引用SENDER的一些代码,但我不知道该怎么做。

我感谢您的帮助 !!! 谢谢。

这是我的代码

class ViewController: UIViewController { @IBAction func AbstractionBtn(sender: AnyObject) { performSegueWithIdentifier("ShowDefinition", sender: "Abstraction") } @IBAction func binarySystemBtn(sender: AnyObject) { performSegueWithIdentifier("ShowDefinition", sender: "Binary System") } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if (segue.identifier == "ShowDefinition") { if let destinationViewController = segue.destinationViewController as? EnglishViewController { destinationViewController.titleMsg = "Abstraction" destinationViewController.definitionMsg = "Abstraction Definition" } } else if(segue.identifier == "ShowDefinition"){if let destinationViewController = segue.destinationViewController as? EnglishViewController { destinationViewController.titleMsg = "Binary System" destinationViewController.definitionMsg = "Binary System Definition" } } } 

您已在performSegueWithIdentifier中的sender参数中正确地将定义作为String传递。 你只需要在prepareForSegue中使用它的值,但首先必须从AnyObject中转换它? 回到一个字符串。

您的代码可能是这样的:

 class ViewController: UIViewController { @IBAction func AbstractionBtn(sender: AnyObject) { performSegueWithIdentifier("ShowDefinition", sender: "Abstraction") } @IBAction func binarySystemBtn(sender: AnyObject) { performSegueWithIdentifier("ShowDefinition", sender: "Binary System") } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if (segue.identifier == "ShowDefinition") { if let destinationViewController = segue.destinationViewController as? EnglishViewController { if let definition = sender as? String { if definition == "Abstraction" { destinationViewController.titleMsg = "Abstraction" destinationViewController.definitionMsg = "Abstraction Definition" } else if definition == "Binary System" { destinationViewController.titleMsg = "Binary System" destinationViewController.definitionMsg = "Binary System Definition" } } } } } } 

试试这个

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if (segue.identifier == "ShowDefinition") { if let destinationViewController = segue.destinationViewController as? EnglishViewController { var btn = sender as! UIButton if btn.tag == 1 { destinationViewController.titleMsg = "Abstraction" destinationViewController.definitionMsg = "Abstraction Definition" } else { destinationViewController.titleMsg = "Binary System" destinationViewController.definitionMsg = "Binary System Definition" } } } } 

并设置这样的按钮标签

 AbstractionBtn.tag = 1 binarySystemBtn.tag = 2 

现在请像这样呼叫segue

 @IBAction func AbstractionBtn(sender: AnyObject) { performSegueWithIdentifier("ShowDefinition", sender:sender) } 

创建名为titleMsgdefinitionMsg的var。 在每个@IBAction方法中,将相应的标题消息设置为self.titleMsg ,对于self.definitionMsg也是self.definitionMsg

那个电话之后

 performSegueWithIdentifier("ShowDefinition", sender: self) 

然后覆盖,

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "ShowDefinition" { let destinationVC = segue.destinationViewController as? EnglishViewController destinationVC.titleMsg = self.titleMsg destinationVC.definitionMsg = self.definitionMsg } } 

希望有所帮助!