簡體   English   中英

關閉UIViewController后將消息發送到parentViewController

[英]Send message to parentViewController after dismissing UIViewController

對於某些人來說,這應該很簡單。

我解雇一個UIViewController是模態呈現由其他UIViewController從自身內部。 我正在使用

[self dismissViewControllerAnimated:YES
                         completion:^{
    // Want to access presentingViewController here.
}];

我嘗試記錄selfnavigationControllerparentViewControllerpresentingViewController ,但是它們都返回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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM