在同一文件中的视图控制器之间传递 Swift 中的数据
Passing Data in Swift Between View Controllers in Same File
为什么我不能将数据从一个视图控制器 class 传递到另一个视图控制器 class,当它们在同一个 .swift 文件中时?
为了理解传递的数据,我已经完成了下面链接的两个教程,并且都让您为第二个视图控制器制作了另一个 .swift 文件。当我完全按照他们的要求行事时。当我做所有相同的事情但只是将 class SecondViewController
放在与 class 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
}
}
对我来说工作正常。
您是否为您的视图正确设置了 classes?带有 textField 的视图(可能还有 ViewTwo
的按钮)应设置为 ViewController
,带有标签的第二个视图应设置为 ViewTwo
.
检查您的 label/textField 之间的连接。它们是否正确连接到您的 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
}
}
为什么我不能将数据从一个视图控制器 class 传递到另一个视图控制器 class,当它们在同一个 .swift 文件中时?
为了理解传递的数据,我已经完成了下面链接的两个教程,并且都让您为第二个视图控制器制作了另一个 .swift 文件。当我完全按照他们的要求行事时。当我做所有相同的事情但只是将 class SecondViewController
放在与 class 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
}
}
对我来说工作正常。
您是否为您的视图正确设置了 classes?带有 textField 的视图(可能还有
ViewTwo
的按钮)应设置为ViewController
,带有标签的第二个视图应设置为ViewTwo
.检查您的 label/textField 之间的连接。它们是否正确连接到您的 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
}
}