我有一個視圖控制器(包含我的菜單)呈現在另一個視圖控制器(我的應用程序)的頂部。從所呈現的視圖控制器訪問呈現視圖控制器?
我需要從提供的視圖控制器(我的菜單)訪問呈現視圖控制器(在我的菜單下),例如訪問一些變量或使呈現視圖控制器執行其中一個segues。
但是,我只是不知道該怎麼做。 我知道「presentsViewController」和「presentedViewController」變量,但我沒有設法成功地使用它們。
任何想法?
代碼(從所呈現的VC,其作爲對AppDelegate中的參考,其中所述窗口被引用):
if let presentingViewController =
self.appDelegate.window?.rootViewController?.presentingViewController
{
presentingViewController.performSegue(
withIdentifier: "nameOfMySegue", sender: self)
}
解決此問題的常用模式是使用委託設計模式。在你的Menu VC中聲明一個委託,並將第一個VC設置爲委託。現在你可以在代理上設置一個屬性或一個調用方法。另一種方式可能是使用通知模式。 – TheAppMentor
@TheAppMentor通過直接引用呈現的視圖控制器來描述兩種更好的設計模式。然而,如果你想要一個強耦合的關係,Apple確實會提供'presentationViewController'。 – dmorrow
這兩種方法實際上都有效。非常感謝。 – BUZZE