[英]Send message to parentViewController after dismissing UIViewController
對於某些人來說,這應該很簡單。
我解雇一個UIViewController
是模態呈現由其他UIViewController
從自身內部。 我正在使用
[self dismissViewControllerAnimated:YES
completion:^{
// Want to access presentingViewController here.
}];
我嘗試記錄self
的navigationController
, parentViewController
和presentingViewController
,但是它們都返回null
。
蘋果的文檔說:
呈現視圖控制器負責解散其呈現的視圖控制器。 如果在顯示的視圖控制器本身上調用此方法,它將自動將消息轉發到顯示的視圖控制器。
據此,該消息將發送到presentingViewController
。 我想知道如何捕捉此消息。 是否有一個委托電話,或者我該如何查找presentedViewController是否被關閉。
沒有公共API可以告訴您這一點。 您可以收聽viewWillAppear:
並以這種方式找出所顯示的視圖控制器已被關閉,但這很麻煩。 我將推薦我一直推薦的並被視為最佳實踐的方法: 切勿將視圖控制器本身拋棄 ! 為您的演示視圖控制器創建一個代理協議,將代理設置為演示視圖控制器,然后在需要從演示中解散演示者時,調用該代理。
為什么不將呈現的視圖控制器放在一旁,而在解雇后訪問它呢?
__weak id weakPresentingViewController = self.presentingViewController;
[self dismissViewControllerAnimated:YES completion: ^
{
id strongPresentingViewController = weakPresentingViewController;
if(strongPresentingViewController == nil) return;
//Do what you will with the presenting view controller.
}
考慮到當前的實現,這是最不容易出錯的方法。 如果當前的視圖控制器在調用塊之前被釋放,則不會造成嚴重的訪問崩潰。 在代碼塊內部,您會強烈捕獲它,以確保它不會在代碼中間釋放。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.