2012-03-26 41 views
26

如果要解僱一個酥料餅 - 在酥料餅的contentViewController內,例如,從一個按鈕,你必須 -在其contentViewController中關閉了UIPopoverController?

  1. 創建於酥料餅的參考,通過創建它
  2. 創建視圖控制器舉行從contentViewController的通知,讓擁有它的視圖控制器知道它應該被解僱,或交替創建一個委託爲同一目的
  3. 發送通知或委託消息時,酥料餅是準備被解僱
  4. 呼叫dismissPopover:animated時通知灰或委託方法被稱爲

同時,從一個UIViewController您可以在模態視圖控制器,父視圖控制器,所述導航控制器,分割視圖控制器,標籤欄控制器,所述檢索顯示控制器,所述子視圖控制器,呈現視圖控制器和呈現的視圖控制器。

有沒有更好的方法來做到這一點從popover的contentViewController?

回答

29

不幸的是,您必須創建一個對UIPopoverController的弱屬性引用,因爲無法從內容視圖控制器中訪問它。我很驚訝UIViewControllers如何訪問模態視圖控制器,父視圖控制器,導航控制器,分離視圖控制器,標籤欄控制器,搜索顯示控制器,並且從iOS 5開始,子視圖控制器以及呈現和呈現控制器......但不是彈出控制器(授予的彈出不是UIViewController但仍然)。

從技術上講,有一個私人的,未公開的方法來檢索UIViewController所在的popoverController ...我不知道爲什麼他們從來沒有公開它,因爲它應該是完全一樣的任何上述控制器。

即使在私人的,無證的世界,也沒有相當於dismissModalViewcontrollerAnimated:。你仍然必須得到那個參考,然後以這種方式消除它。

+1

通過搜索文檔後,我也很驚訝。不幸的是,這會在整個過程中增加不必要的依賴 – Maurizio 2012-04-19 14:38:26

+0

在iOS8中,您現在可以選擇:self.popoverPresentationController – Jacky 2015-04-21 23:26:30

1

另一種方式來解決這個問題是創建一個增加了一個NSNotification觀察者爲-(void)closePopoverIfNecessary:(NSNotification*)notification這種方法的抽象的視圖控制器(用於所有視圖控制器),並有子類選擇實現的方法,如果關閉其酥料餅(S)打開。然後從彈出窗口的控制器中觸發通知關閉它。如果需要,您還可以通過通知(userInfo)傳遞其他信息。

這樣就不需要父引用。

+0

這樣不要忘記在抽象控制器的'dealloc'中刪除觀察者 – 2014-03-17 13:32:48

相關問題