使用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) }
创建名为titleMsg
和definitionMsg
的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 } }
希望有所帮助!