Ios 容器视图及其一些问题

Ios 容器视图及其一些问题,ios,swift,xcode,uilabel,uicontainerview,Ios,Swift,Xcode,Uilabel,Uicontainerview,我只是从Swift开始,我可以克服这个问题,我不知道如何从ViewController运行ViewController2内部的函数 import UIKit class Main: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a

我只是从Swift开始,我可以克服这个问题,我不知道如何从ViewController运行ViewController2内部的函数

import UIKit

class Main: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    @IBAction func onButtonPressed(_ sender: Any) {
        performSegue(withIdentifier: "newSegue", sender: self)
    }

}

class ViewController: UIViewController {

    let SecondViewController = ViewController2()

    override func viewDidLoad() {
        super.viewDidLoad()
        SecondViewController.changeText()
        // Do any additional setup after loading the view, typically from a nib.
    }

}

class ViewController2: UIViewController {

    @IBOutlet weak var label1: UILabel!
    @IBOutlet weak var label2: UILabel!
    @IBOutlet weak var label3: UILabel!
    @IBOutlet weak var label4: UILabel!
    @IBOutlet weak var label5: UILabel!
    @IBOutlet weak var label6: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    func changeText() {
        label1.text = "hi"
        label2.text = "how"
        label3.text = "are"
        label4.text = "you"
        label5.text = "doing"
        label6.text = "!"
    }
}

获取对嵌入到容器视图中的视图控制器的引用的最简单方法是在
(prepare(for segue:sender:)
中进行

在序列图像板中设置容器视图时,您将看到一个将包含的视图控制器链接到包含的视图控制器的序列。这是一个嵌入序列,将在加载包含的视图控制器后立即触发(但在
viewdiload
完成后)。您可以使用此序列获取对目标的引用(这将是您的
ViewController2
实例)并将其存储在属性中。您不需要对
ViewController2
类进行任何更改

class ViewController: UIViewController {

    var secondViewController: ViewController2?

    override func viewDidLoad() {
        super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.secondViewController?.changeText()
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let destVC = segue.destination as? ViewController2 {
            self.secondViewController = destVC
        }
    }
}

不允许调用这样的函数。您需要使用委托或通知观察者。查看通知或协议:(本文的答案应该会帮助您)ViewController2是如何显示的?它是否位于
ViewController
内的容器视图中?@Paulw11是的。