使用 prepareForSegue 传递数据
Pass data with prepareForSegue
我试图将数据从 viewController 1 传递到 viewController2,我有 2 个按钮和 1 个 segue(因此有一个 segue 标识符)用于这 2 个按钮,每个按钮按下时应该显示:1 个标签显示标题和 1 个文本视图显示定义,我无法显示每个单词自己的数据;我知道它必须是在 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"
}
}
}
创建一个名为 titleMsg
和 definitionMsg
的变量。
在每个 @IBAction 方法中,将适当的标题消息设置为 self.titleMsg
并且类似地设置为 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
}
}
希望对您有所帮助!
试试这个
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)
}
您已在 performSegueWithIdentifier 的 sender 参数中将定义作为字符串正确传递。你只需要在 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"
}
}
}
}
}
}
我试图将数据从 viewController 1 传递到 viewController2,我有 2 个按钮和 1 个 segue(因此有一个 segue 标识符)用于这 2 个按钮,每个按钮按下时应该显示:1 个标签显示标题和 1 个文本视图显示定义,我无法显示每个单词自己的数据;我知道它必须是在 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"
}
}
}
创建一个名为 titleMsg
和 definitionMsg
的变量。
在每个 @IBAction 方法中,将适当的标题消息设置为 self.titleMsg
并且类似地设置为 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
}
}
希望对您有所帮助!
试试这个
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)
}
您已在 performSegueWithIdentifier 的 sender 参数中将定义作为字符串正确传递。你只需要在 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"
}
}
}
}
}
}