我在视图控制器上有一个按钮 - 该视图属于" MainView"包含另一个viewContainer,其视图属于" SecondView"。
我在secondView.swift文件中有代码调用MainView.swift中的函数MainView().updateButton()
当MainView中的updateButton
函数只包含print("called")
时,它会正确调用 - 但是如果我将函数更改为button.backgroundColor = UIColor.blue
,那么它会在该行崩溃并出现错误:
致命错误:在解包可选值时意外发现nil
如何阻止此次崩溃?
答案 0 :(得分:1)
表达式MainView()
创建MainView
类的新实例。 MainView的新副本尚未加载它的视图,并且与屏幕上的MainView
实例无关。不要那样做。
您需要一种方法来访问MainView的现有实例。
如果您的SecondView
是MainView
的孩子,那么您可以使用它的父属性获取对父视图控制器的引用:
@IBAction func buttonAction(sender: UIButton) {
if let mainView = self.parent as MainView {
mainView.updateButton()
}
}
答案 1 :(得分:1)
您可以使用NotificationCenter。这是一个教程https://medium.com/ios-geek-community/pass-data-with-nsnotification-in-swift-3-73743723c84b#.jyxw619jd。您将根据示例更改按钮的属性,而不是传递数据。您可以根据需要更改代码。