2017-02-19 66 views
-1

我在视图控制器上有一个按钮 - 该视图是类“MainView”包含另一个viewContainer,其视图是类“SecondView”。更改不同类别按钮的属性

我有一些代码在调用MainView.swift的函数secondView.swift文件MainView().updateButton()

中的MainView的updateButton函数调用正确时,它仅包含print("called") - 但是如果我改变功能button.backgroundColor = UIColor.blue则与该错误在该行上崩溃:

fatal error: unexpectedly found nil while unwrapping an Optional value

我该如何阻止这次崩溃?

+0

您可以使用NotificationCenter。这里是一个教程https://medium.com/ios-geek-community/pass-data-with-nsnotification-in-swift-3-73743723c84b#.7k8kpqfd7。你将改变一个类的特性而不是根据数据传递例如。您可以根据需要更改代码。 – theduman

+0

@theduman - 这工作完美 - 把它作为一个答案,并将其标记为正确 – ZiEiTiA

回答

1

表达式MainView()创建MainView类的新实例。 MainView的新副本将不会加载视图,并且不会与屏幕上的MainView实例有关。不要这样做。

您需要一种方法来访问MainView的现有实例。

如果您SecondViewMainView一个孩子,那么你可以使用它的父属性来获取父视图控制器的引用:

@IBAction func buttonAction(sender: UIButton) { 
    if let mainView = self.parent as MainView { 
    mainView.updateButton() 
    } 
} 
+0

我试图使用这个,但我不知道如何使SecondView成为MainView的孩子?当我使用这个代码的时候它想把'as!',然后返回错误>条件绑定的Initialiser必须有可选类型,而不是'MainView'。如果我使用'as?'它可以工作,但仍然在'button.backgroundColor = UIColor.blue'行中崩溃 – ZiEiTiA

+0

编辑您的问题以显示如何创建MainView和SecondView以及它们之间的相互关系。并添加一个“?”之后。 –

+0

并编辑您的问题以显示崩溃的实际代码。 –