【问题标题】:Passing Data in Swift Between View Controllers in Same File在同一文件中的视图控制器之间以 Swift 传递数据
【发布时间】:2015-06-16 23:23:30
【问题描述】:

当它们在同一个 .swift 文件中时,为什么我不能将数据从一个视图控制器类传递到另一个视图控制器类?

为了理解传递的数据,我已经完成了下面链接的两个教程,并且都让你为你的第二个视图控制器制作了另一个 .swift 文件。当我完全跟随他们时,它就起作用了。当我做同样的事情但只是将class SecondViewControllerclass FirstViewController 放在同一个.swift 文件中时,它不起作用。为什么?

我正在构建一个包含三个视图控制器的应用程序,如果可以的话,我宁愿将所有代码保存在一个文件中。这是为什么它不起作用还是只是形式不好?

教程:

How to Pass Data from View Controller (Swift : Xcode) on YouTube

Segue Between Swift View Controllers on CodingExplorer

这行得通:

//  ViewController.swift
import UIKit
class ViewController: UIViewController {
    @IBOutlet var TextField: UITextField!    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        var DestViewController: ViewTwo = segue.destinationViewController as ViewTwo        
        DestViewController.LabelText = TextField.text        
    }
}

//  ViewTwo.swift
import UIKit
    class ViewTwo: UIViewController {
    @IBOutlet var Label: UILabel!    
    var LabelText = String()    
    override func viewDidLoad() {        
        Label.text = LabelText       
    }
}

这不是:

//  ViewController.swift
import UIKit

class ViewController: UIViewController {
    @IBOutlet var TextField: UITextField!    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        var DestViewController: ViewTwo = segue.destinationViewController as ViewTwo        
        DestViewController.LabelText = TextField.text        
    }
}

class ViewTwo: UIViewController {
    @IBOutlet var Label: UILabel!    
    var LabelText = String()    
    override func viewDidLoad() {        
        Label.text = LabelText       
    }
}

【问题讨论】:

  • 你能粘贴一些代码吗?
  • 你为什么在同一个.swift文件中做这一切。我认为这不是一个好习惯。所以对不同的viewController使用不同的.swift文件

标签: ios swift uiviewcontroller segue


【解决方案1】:

对我来说工作得很好。

  1. 您是否正确设置了视图的类?带有 textField 的视图(可能还有一个指向 ViewTwo 的按钮)应设置为 ViewController,带有标签的第二个视图应设置为 ViewTwo

  2. 检查标签/文本字段之间的连接。他们是否正确连接到您的班级?

  3. 这是我用的代码,应该是一模一样的:

导入 UIKit

class ViewController: UIViewController {

    @IBOutlet var TextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        var DestViewController = segue.destinationViewController as! ViewTwo
        DestViewController.LabelText = TextField.text
    }
}

class ViewTwo: UIViewController {

    @IBOutlet var Label: UILabel!

    var LabelText = String()

    override func viewDidLoad() {
        Label.text = LabelText
    }
}

【讨论】:

  • 谢谢。我一定是做错了什么。事实证明,我将这些东西应用于我的程序的问题是我试图将一个数组传递给一个字符串。将它传递给一个数组,现在它工作得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多