【问题标题】:Swift: Pass multiple values between viewsSwift:在视图之间传递多个值
【发布时间】:2015-02-03 17:08:04
【问题描述】:

我有一个包含两个文本字段和一个按钮的视图。

@IBOutlet var inputURL: UITextField!
@IBOutlet var inputName: UITextField!

@IBAction func submitUrlButton(sender: AnyObject) {
}

第二个视图有两个变量:

var submittedURL = ""
var submittedName = ""

println("Name \(submittedName)")
println("URL \(submittedURL)")

在 Swift 中,如何传递在两个文本字段中输入的值并将它们分配给第二个视图中的这些变量?

谢谢

为 THETOM 编辑:

import UIKit

class ViewController: UIViewController {

@IBOutlet var inputURL: UITextField!

@IBAction func submitBtn(sender: AnyObject) {
    performSegueWithIdentifier("submissionSegue", sender: self)
}


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

    // Create a new variable to store the instance of the next view controller
    let destinationVC = segue.destinationViewController as BrandsViewController
    destinationVC.submittedURL.text = inputURL.text
}
}

【问题讨论】:

  • 您能否详细说明以下几点: - 那些视图或视图控制器? - 谁在创建这些视图或视图控制器? - 这两个视图之间有联系吗?
  • @TheTom 是的,他们是视图控制器,他们有一个名为“submissionSegue”的segue。

标签: swift uiviewcontroller parameters


【解决方案1】:

你可以使用方法prepareForSegue。

在第一个视图(segue 的来源)中编写以下代码:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

    // Create a new variable to store the instance of the next view controller 
    let destinationVC = segue.destinationViewController as CustomViewController
    destinationVC.submittedURL = inputURL.text
    destinationVC.submittedName = inputName.text
}

这里的CustomViewController是segue要去的UIViewController的自定义类。

要在您的按钮@IBAction 中以编程方式执行转场:

@IBAction func buttonWasClicked(sender: AnyObject) {
    performSegueWithIdentifier("submissionSegue", sender: self)
}

【讨论】:

  • 那我如何获得启动segue更改的按钮?
  • 另外,当我将该代码添加到视图控制器中时,我得到:使用未声明的类型'UIViewController'
  • 执行 segue 将其添加到 IBAction : performSegueWithIdentifier("submissionSegue", sender: self)
  • 检查 UIViewController 是否拼写正确。我之前打错字了。否则在文件开头导入 UIKit
  • @TheTom UIViewController 没有成员 submitURL 或 submitName 因此它应该被转换为扩展 UIViewController 的对象
【解决方案2】:

由于您的视图控制器与 segue 链接,您可以在第一个视图控制器中覆盖 prepareForSegue 方法并通过这样做来传递数据

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if (segue.identifier == "secondViewController") { // here secondViewController is your segue identifier            
        var secondViewController = segue.destinationViewController as SecondViewController // where SecondViewController is the name of your second view controller class
        secondViewController.submittedURL = inputURL.text
        secondViewController.submittedName = inputName.text
    }
}

要在按钮操作中执行Segue,请使用 perfromSegueWithIdentifier 方法

@IBAction func submitUrlButton(sender: AnyObject) {

    //replace identifier with your identifier from storyboard
    self.performSegueWithIdentifier("secondViewController", sender: self)
}

【讨论】:

    【解决方案3】:
    The simplest way of accessing values globally not neccessary to pass with segue
    

    第一个视图控制器

    import UIKit
    var submittedURL:NSString? // declare them here
    var submittedName:NSString? // Now these two variables are accessible globally 
    class YourViewController : UIViewController 
    {
    @IBOutlet var inputURL: UITextField!
    @IBOutlet var inputName: UITextField!
    
    @IBAction func submitUrlButton(sender: AnyObject) {
     if inputURL.text == "" && inputName.text == ""
    { 
     //Show an alert here etc
    }
    else {
     self.submittedURL.text = inputURL.text
    self.submittedName.text = inputName.text
     }
    }
    }
    

    SecondView 控制器

    import UIKit
    class SecondviewController: UIViewController 
    {
    //inside viewDidload
    println(submittedURL)
    println(submittedName)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-01
      • 2019-08-12
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多