子視圖控制器由子視圖控制器的實現中下面的代碼刪除:父視圖控制器如何通知其子視圖控制器已自行刪除?
- (void)commandFinishVC
{
[ self.view removeFromSuperview];
[ self removeFromParentViewController ];
}
子視圖控制器和視圖被成功刪除,但父母是如何通知呢? -viewDidDisappear未被調用,-viewDidUnload已被棄用。
從我可以發現的例子中,始終認爲父視圖控制器是提名被移除孩子的事件的發起者,但是對於我來說,孩子應該是自治的,以完成邏輯。
應該使用self.parentViewController屬性調用remove方法,並在父視圖控制器中使用類似下面的內容:
- (void)commandFinishVC
{
[ childVC.view removeFromSuperview];
[ childVC removeFromParentViewController ];
}
背後的原因是使用VC(視圖控制器)容器作爲純容器,沒有屬於它的視圖。子容器內的視圖有其相關的事件;因此兒童VC內的動作(例如,按下完成按鈕)確定兒童VC的釋放。 – Roddy
非常感謝您的回覆,它確實有助於澄清我一直在閱讀的內容。 – Roddy
Rob,你知道如果你不是在你的子視圖控制器中重寫該方法,willMoveToParentViewController是否真的有必要?蘋果的文檔聽起來就像你應該這樣稱呼,但是我不知道它是否真的做了什麼,如果你沒有在你的孩子中覆蓋它。如果我不叫這種方法,我還沒有看到任何問題。 – rdelmar