Swift - 从外部设置一个 UI 元素

Swift - Set a UI element from outside

我有这个 UIViewController

import UIKit

class UIViewController1: UIViewController {

    @IBOutlet weak var someTitle: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

当我从另一个视图控制器实例化它时,我试图设置 someTitle

class ViewController: UIViewController {

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

    override func viewDidAppear(animated: Bool) {
        let stb = UIStoryboard(name: "Main", bundle: nil)

        let vc1 = stb.instantiateViewControllerWithIdentifier("someSTBID") as! UIViewController1
        vc1.someTitle.text = "My Title" // it fails here!!!!!
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }    
}

它在上面一行失败的原因是我试图强制解包一个 nil 可选的,它是 someTitle.

请告诉我在这种情况下设置 someTitle 的方法。

你需要它进入超类 viewDidAppear 吗,因为如果你把它放在超类 viewDidLoad() 中它应该可以工作。希望对您和未来的观众有所帮助。

您的第二个 UIViewController 尚未加载,因此 someTitle IBOutlet 将为零。您有两个选择:

  1. 简单的一个:你强制加载第二个UIViewController,例如:vc1.view就够了然后你设置它(我不推荐这个)
  2. 正确的:你让第二个UIViewController负责在正确的时间设置自己的标题。如果你需要传递 "My title",你可以简单地通过像 configureVc(title: String) 这样的函数传递它,或者通过暴露一个像 var title: String 这样的变量,所以在第二个 viewDidLoad =10=] 你会 someTitle.text = title