我想使用一个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值。 最佳答案
在你展示视图控制器之前,我认为你的标签是不可用的。改为传递字符串并在AlertVC
viewDidLoad
方法中设置标签文本。
在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