我想使用一个rootVC中的信息在一个modally-presented otherVC中。这是它的设置:

protocol OtherVCDelegate {
    func didHitOK()
    func didHitCancel()
}


class ViewController: UIViewController, OtherVCDelegate {
    func didHitCancel() {
        //do a function
    }

    func didHitOK() {
        //do another function
    }
    var stringy = "Hello"

    @IBAction func ButtonAction(_ sender: Any) {

        let otherVC = self.storyboard?.instantiateViewController(withIdentifier: "AlertVC") as! AlertVC
        otherVC.modalPresentationStyle = .overCurrentContext
        otherVC.delegate = self
        otherVC.label.text = stringy //THIS is where my question focuses
        self.present(otherVC, animated: true, completion: nil)//presents the other VC modally

    }

otherVC有一个名为“label”的UILabel。不过,我在运行ButtonAction函数时遇到的问题是,xcode发现了一个致命错误,因为它在展开可选值时意外地发现了nil。我有点搞不明白为什么会发生这种情况,因为在ButtonAction中输入一个print语句可以确认stringy不是nil。otherVC中的标签设置正确,因此我不确定是什么给出了nil值。

最佳答案

在你展示视图控制器之前,我认为你的标签是不可用的。改为传递字符串并在AlertVCviewDidLoad方法中设置标签文本。
AlertVC中声明一个字符串:

var stringy:String?

然后改变你的密码
 @IBAction func ButtonAction(_ sender: Any) {

        let otherVC = self.storyboard?.instantiateViewController(withIdentifier: "AlertVC") as! AlertVC
        otherVC.modalPresentationStyle = .overCurrentContext
        otherVC.delegate = self
        otherVC.stringy = stringy //you pass the string instead of setting the label text
        self.present(otherVC, animated: true, completion: nil)//presents the other VC modally

    }

此时,您可以在viewDidLoad中设置文本标签:
   self.label.text = self.stringy

10-08 05:47