【问题标题】:Container View and some problems with it容器视图及其一些问题
【发布时间】:2019-02-01 19:45:28
【问题描述】:

我刚开始使用 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 = "!"
    }
}

【问题讨论】:

  • 不允许这样调用任何函数。您需要使用委托或通知观察者。
  • 看看通知或协议:(这篇文章的答案应该对你有帮助)stackoverflow.com/questions/51650475/…
  • ViewController2 是如何呈现的?是否在 ViewController 内的容器视图中?
  • @Paulw11 是的。

标签: ios swift xcode uilabel uicontainerview


【解决方案1】:

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

当您在情节提要中设置容器视图时,您将看到将包含视图控制器链接到包含视图控制器的 segue。这是一个 embed segue,它将在包含的视图控制器加载后(但在 viewDidLoad 完成后)触发。您可以使用此 segue 获取对目标的引用(这将是您的 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
        }
    }
}

【讨论】:

    猜你喜欢
    • 2016-12-15
    • 2014-09-13
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多