2017-08-09 64 views
1

我有ChildViewController,它繼承自ParentViewController,如下所示:class ChildViewController: ParentViewController。在ParentViewController我試圖執行下面的代碼片段:Swift 3:獲取子視圖控制器的上下文

let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "anotherViewController") 
self.present(controller, animated: true, completion: nil) 

我猜想它不工作,因爲它是ParentViewController孩子是實際的屏幕上可見。是否有可能讓他的背景(自我)的ChildViewController爲了使片段工作?

謝謝你的幫助。

+2

請詳細說明,編輯您的問題。 anotherViewController和ChildViewController/ParentViewController之間的關聯是什麼? 「我假設它不工作......」什麼?!你當前的結果是什麼?你期望的結果是什麼? 「是否有可能讓他的背景(自我)」得到它在哪裏? 「自我」只是一個當前實例... –

+0

@MaticOblak我試圖從ParentViewController呈現一個新的視圖控制器,但是當我嘗試時該應用程序崩潰。 ParentViewController是ChildViewController繼承的,AnotherViewController只是另一個視圖控制器,我試圖顯示。 – samson

+0

那麼崩潰是什麼?一個從另一個繼承的視圖控制器不會產生崩潰,即使父母正在呈現一個孩子,反之亦然,父母提出父母或孩子表現孩子。您可以堆疊/創建任意數量的相同視圖控制器的實例,並根據需要使用它們。 –

回答

0

如果我現在明白你的問題(並且那裏有一個大的IF),你就無法理解繼承和你的「上下文」。

如果您有2個班級,如您所說ParentViewControllerChildViewController其中ChildViewControllerParentViewController的子類。你有一個ParentViewController的方法,你假設沒有ChildViewController的訪問/上下文,雖然實例本身是一個ChildViewController ......你在這裏的假設是錯誤的!

ChildViewController將繼承所有的從其超ParentViewController的方法和所有這些方法都具有自參考ChildViewController,而不是ParentViewController。這意味着,如果您有方法A和方法B,則覆蓋子視圖控制器中的方法B。當父視圖控制器在方法A中調用方法B時,將調用重寫的方法。這意味着雖然在父視圖控制器中調用方法A,但方法B將在子視圖控制器上調用。因此,從來沒有得到一個「孩子」的背景的問題。問題可能在於你可能無法獲得作爲父母的自我背景。但是,這是通過設計創造的,它完全是應該的。

所以我想回答你的問題;是的,這是可能的,而且實際上已經在爲你發生了。如果您在父視圖控制器的方法中放置斷點並打印自己(在控制檯類型「po self」中),您應該看到該類型實際上是子視圖控制器。

您面臨的問題很可能是其他問題的結果。請添加異常斷點以查看崩潰發生的位置,並在控制檯中查看日誌以查看它說的內容。

相關問題