Skip to main content
 首页 » 编程设计

ios之在同一文件中的 View Controller 之间以 Swift 传递数据

2024年01月01日61luoye11

当它们在同一个 .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        
    } 
} 

请您参考如下方法:

对我来说工作正常。

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

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

  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 
    } 
}