小编典典

快速访问另一个Viewcontroller的实例

swift

我正在尝试将数据从一个View Controller的文本字段传输到另一个视图的标签。

如何从另一个View Controller的代码中调用View
Controller实例?我正在使用情节提要,因此从未在代码中创建视图控制器的实例吗?是否自动创建实例?他们叫什么名字?

谢谢你的帮助!


阅读 411

收藏
2020-07-07

共1个答案

小编典典

1.如果包含文本字段的视图控制器可以调用(通过segue)包含标签的视图控制器…

在您的项目中添加一个新的Cocoa Touch类文件,为其命名FirstViewController并在其中设置以下代码:

import UIKit

class FirstViewController: UIViewController {

    @IBOutlet weak var textField: UITextField! // FIXME: link this to the UITextField in the Storyboard!!!

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        let controller = segue.destinationViewController as! SecondViewController
        controller.text = textField.text
    }

}

在您的项目中添加一个新的Cocoa Touch类文件,为其命名SecondViewController并在其中设置以下代码:

import UIKit

class SecondViewController: UIViewController {

    var text: String?
    @IBOutlet weak var label: UILabel! // FIXME: link this to the UILabel in the Storyboard!!!

    override func viewDidLoad() {
        super.viewDidLoad()

        label.text = text
    }

}

在情节提要中,将第一个视图控制器嵌入到中UINavigationController。使用UIButton或将第一个视图控制器链接到第二个UIBarButtonItem。将第一个视图控制器FirstViewController的名称设置为,将第二个视图控制器的名称设置为SecondViewControllerUITextField在第一个视图控制器中创建一个。UILabel在第二个视图控制器中创建一个。链接文本框,并在标签各自的声明FirstViewControllerSecondViewController


2.如果包含标签的视图控制器可以调用(通过segue)包含文本字段的视图控制器…

在这里,这是一个完美的协议/代理案例。您可能会在StackOverflow上找到很多与此相关的东西。但是,这是一个粗糙的示例。

在您的项目中添加一个新的Cocoa Touch类文件,为其命名FirstViewController并在其中设置以下代码:

import UIKit

class FirstViewController: UIViewController, DetailsDelegate {

    @IBOutlet weak var label: UILabel! // FIXME: link this to the UILabel in the Storyboard

    func updateLabel(withString string: String?) {
        label.text = string
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        let controller = segue.destinationViewController as! SecondViewController
        controller.delegate = self
    }

}

在您的项目中添加一个新的Cocoa / Cocoa Touch类文件,为其命名SecondViewController并在其中设置以下代码:

import UIKit

protocol DetailsDelegate: class {
    func updateLabel(withString string: String?)
}

class SecondViewController: UIViewController {

    weak var delegate: DetailsDelegate?
    @IBOutlet weak var textField: UITextField! // FIXME: link this to the UITextField in the Storyboard

    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)

        delegate?.updateLabel(withString: textField.text)
    }

}

在情节提要中,将第一个视图控制器嵌入到中UINavigationController。使用UIButton或将第一个视图控制器链接到第二个UIBarButtonItem。将第一个视图控制器FirstViewController的名称设置为,将第二个视图控制器的名称设置为SecondViewControllerUILabel在第一个视图控制器中创建一个。UITextField在第二个视图控制器中创建一个。链接文本框,并在标签各自的声明FirstViewControllerSecondViewController

2020-07-07