簡體   English   中英

從contentViewController中解除UIPopoverController?

[英]Dismissing a UIPopoverController from within its contentViewController?

如果你想解雇一個彈出窗口 - 例如,從popover的contentViewController中的一個按鈕你必須 -

  1. 創建一個對由創建它的視圖控制器持有的彈出框的引用
  2. 從contentViewController創建一個通知,讓擁有的視圖控制器知道它應該被解雇,或者為了相同的目的創建一個委托
  3. 當彈出框准備好被解雇時發送通知或委托消息
  4. 調用dismissPopover:animated調用通知或委托方法時設置dismissPopover:animated

同時,從UIViewController可以訪問模態視圖控制器,父視圖控制器,導航控制器,拆分視圖控制器,標簽欄控制器,搜索顯示控制器,子視圖控制器,呈現視圖控制器和呈現查看控制器。

從popover的contentViewController有更好的方法嗎?

不幸的是,你必須創建一個對所述UIPopoverController的弱屬性引用,因為無法從內容視圖控制器中訪問它。

我很驚訝UIViewControllers如何訪問模態視圖控制器,父視圖控制器,導航控制器,拆分視圖控制器,標簽欄控制器,搜索顯示控制器,以及iOS 5,子視圖控制器以及呈現並提供控制器...但不是彈出控制器(授予的彈出窗口不是UIViewController但仍然)。

從技術上講,有一個私有的,未記錄的方法來檢索UIViewController所在的popoverController ...我不知道為什么它們從未公開它,因為它應該與上述任何控制器完全相同。

雖然即使在私有的,未記錄的世界中,也沒有相當於dismissModalViewcontrollerAnimated: . 你仍然必須得到那個引用然后以這種方式解雇它。

解決此問題的另一種方法是創建一個抽象視圖控制器(用於所有視圖控制器),將NSNotification觀察器添加到方法,例如-(void)closePopoverIfNecessary:(NSNotification*)notification並讓子類可選地實現關閉的方法他們的彈出窗口如果打開的話。 然后從彈出框的控制器中激活通知以關閉它。 如果需要,您還可以通過通知(userInfo)傳遞其他信息。

這樣就不需要父引用了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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