从不同的类更改按钮的属性

时间:2017-02-19 23:56:20

标签: ios function class swift3

我在视图控制器上有一个按钮 - 该视图属于" MainView"包含另一个viewContainer,其视图属于" SecondView"。

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

当MainView中的updateButton函数只包含print("called")时,它会正确调用 - 但是如果我将函数更改为button.backgroundColor = UIColor.blue,那么它会在该行崩溃并出现错误:

  

致命错误:在解包可选值时意外发现nil

如何阻止此次崩溃?

2 个答案:

答案 0 :(得分:1)

表达式MainView()创建MainView类的新实例。 MainView的新副本尚未加载它的视图,并且与屏幕上的MainView实例无关。不要那样做。

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

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

@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。您将根据示例更改按钮的属性,而不是传递数据。您可以根据需要更改代码。