当它们在同一个 .swift 文件中时,为什么我不能将数据从一个 View Controller 类传递到另一个 View Controller 类?
为了理解传递的数据,我已经完成了下面链接的两个教程,并且都让您为第二个 View Controller 制作了另一个 .swift 文件。当我完全按照他们的要求行事时。当我做所有相同的事情但只是将 class SecondViewController 放在与 class FirstViewController 相同的 .swift 文件中时,它不起作用。为什么?
我正在构建一个包含三个 View Controller 的应用程序,如果可以的话,我宁愿将所有代码保存在一个文件中。这是它不起作用的原因还是它只是形式不佳?
教程:
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
}
}
请您参考如下方法:
对我来说工作正常。
您是否正确设置了 View 的类?带有 textField 的 View (可能还有
ViewTwo的按钮)应设置为ViewController,带有标签的第二个 View 应设置为ViewTwo.检查标签/文本字段之间的连接。他们是否正确连接到您的类(class)?
这是我用的代码,应该是完全一样的:
导入 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
}
}
