2017-02-19 62 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

並編輯您的問題以顯示崩潰的實際代碼。 –