2014-02-23 51 views
0

我有一個視圖控制器。當我按下一個按鈕時,會出現一個帶有uitableview的popover控制器。我選擇一行,顯示另一個視圖,其中包含一些控件。當我按下一個表示「保存項目」的按鈕時,我想讓它關閉彈出窗口。我該怎麼做呢?以編程方式關閉嵌入導航控制器的視圖中的彈出窗口

這是我已經試過:

  • 使用委託和協議模式。這不起作用,因爲爲了在我的tableview中推入另一個視圖,整個事情必須嵌入到導航視圖控制器中,所以當我繼續時,它會繼續導航到導航控制器,而不是我可以設置popover委託的tableview對於。

  • 將我的主視圖添加爲我想忽略的視圖的成員。我不知道爲什麼這不起作用。

回答

1

的硬清潔方式

有四個視圖控制器中的故事,加上酥料餅的控制器。我將調用三個視圖控制器「主視圖控制器」,「導航」,「vcA」和「vcB」。據我瞭解,「nav」是彈出窗口的初始內容視圖控制器,並具有「vcA」作爲其根視圖控制器。

main view controller -> popover controller -> nav -> vcA -> (later) vcB 

當您從主視圖控制器呈現彈出窗口時,您保留對彈出窗口控制器的引用。正如你所知道的那樣,這使得解僱成爲可能。

當您創建保存按鈕時,您將其目標設置爲主視圖控制器及其操作主視圖控制器中的方法。你將不得不在代碼中設置它;它不能從故事板配置,因爲您無法從一個場景到另一個場景形成動作。 (你可以做到這一點,因爲當你最初配置popover控制器時,你首先引用了nav和vcA,因此你可以把vcA作爲主視圖控制器的自引用,如果需要的話,你可以傳遞這個引用從vcA到vcB,因爲vcB被召喚並推送到導航堆棧上。)

現在用戶點擊Save,你的主視圖控制器的方法運行,並且它使用它對popover控制器的引用來告訴它忽略。

的簡易骯髒的方式

與所有的挫折感。主視圖控制器註冊一個NSNotification。保存按鈕發佈NSNotification。完成。 :)

中間道路

你可以在你的故事板使用酥料餅賽格瑞集全環比上漲,並通過回捲方法回到主視圖控制器匹配開卷做賽格瑞解僱。我從來沒有想到這一點,因爲我不喜歡popover賽車非常多。但它確實有效。

+0

謝謝。當我有機會時,我會給它一個鏡頭。我會先嚐試正確的方法。 :-) – benjsigmon

+0

想到了第三種方式 - 將其添加到我的建議列表中。 – matt

+0

「當您從主視圖控制器呈現彈出窗口時,您保留對彈出窗口控制器的引用。」對。當我在故事板中將該segue作爲彈出窗口調用時,如何獲取該指針並將其保存在我的主視圖控制器的彈出窗口控制器變量中? – benjsigmon

0

這是我如何解決我的問題(抱歉壞英文):

首先,在VCA創建的UIStoryboardPopoverSegue屬性,並從主視圖控制器設置。

導航 - > VcA_ViewController

@property (strong, nonatomic) UIStoryboardPopoverSegue *popupSegue; 

然後,在主視圖控制器prepareForSegue設置屬性:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
if([segue.identifier isEqualToString:@"your segue from the mainview to the navigation"]) { 
    UINavigationController *navigationController = (UINavigationController *)c; 
    VcA_ViewController *vcA = (VRPointOfInterestsFiltersViewController *) navigationController.topViewController; 
    vcA.popupSegue = (UIStoryboardPopoverSegue*)segue; 
} } 

現在,從VCA控制器,你可以有解僱按鈕

- (IBAction)dismissPopoup:(id)sender { 
[self.popupSegue.popoverController dismissPopoverAnimated:YES]; } 

不要忘記將PopViewer從MainViewController鏈接到Nav控制器。

希望它有幫助!

相關問題