2016-09-16 33 views
0

我有一個NavigationController與2條按鈕說p1,p2,每按下時呈現一個演示文稿popover。關閉從其他視圖控制器彈出

在按下彈出窗口外的任何位置或關閉彈出窗口中的按鈕時,彈出窗口會成功關閉。

但是,可以說,如果我按p2 - > p2 popover顯示。之後,如果我按p1然後p2 popover不關閉,我必須按任何地方先關閉p1,然後再按p2顯示p2。

如何先關閉p1,然後在一次性按p2時顯示p2?

我是否需要使用NSNotification從p2到p1還是可以有其他方法?

我沒有按鈕的IBaction程序,並且直接使用了故事板遊戲。我相信,我必須檢查p1是否在p2 viewdidload中,然後刪除p1,反之亦然。這是我沒有得到的。這個怎麼做 。

+0

顯示您的代碼! – Lion

+0

請分享代碼和屏幕截圖.. – vaibhav

+0

您可以使用整個透明視圖並使用輕擊手勢來關閉顯示的彈出窗口。 – Janmenjaya

回答

0

請關閉第一酥料餅的編程,然後延遲之後本第二酥料餅的時間(0.2秒)

第一步:辭退首先酥料餅

self.popoverController!.dismissViewControllerAnimated(true, completion: nil) 

第二步:延遲之後存在第二酥料餅

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.2 * NSEC_PER_SEC); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     <WRITE YOUR CODE HERE for present popover> 
    }); 
+0

如何從不同的viewController的viewdidload方法做到這一點?首先關閉第二個視圖控制器的viewdidload。 – CodeTry

+0

有兩種方法可以做到這一點。您可以使用委託或NSNotificationCenter從不同的viewController調用方法。 – miOS

0

你只需要檢查兩個按鈕的操作方法,如果其他popover已經可見,那麼首先解開它然後顯示另一個。

可以說,如果我按p2 - > p2 popover顯示。在此之後,如果我按p1,然後首先檢查p2是否已經呈現,如果已經存在,則關閉它並顯示p1,對p1應用相同的邏輯。

類似這種方法的東西

- (void) p2 clicked { 
    if([p1 alreadyPresented]){ 
     dismiss p1; 
     present p2; 
    }else{ 
     present p2; 
    } 
} 

[UPDATE]

讓我們看看一個例子來dissmiss其他popovers,我是一個視圖控制器A,並我有一個@property(強,非原子)的另一個視圖控制器B,我可以使用此代碼在我內部定義的任何函數中解釋B,假設 讓我們假設B在A中被定義爲

@property(strong, nonatomic) ViewControllerB *popoverB; 

然後在A裏面做這個;

- (void) dismissB{ 
    if ([popoverB presentedViewController]) { 
     [popoverB dismissViewControllerAnimated:YES completion:^{ 
     //Present here your Popover controller A here. 
     }]; 
    } 
} 
+0

這是真正的問題,如何檢查p2已經在p2中呈現?我沒有按鈕的IBaction程序,我直接使用了storyboard segues。我需要在VC的viewdidLoad中做上面的檢查。 – CodeTry

+0

查看我添加的更新,從Nirav D的答案,這是如何解除其他控制器從一個控制器。 –

+0

我相信,它會更多。 PopoverB只是ViewControllerB類型的另一個對象,而不是實際顯示的一個對象。可能是我應該給我的故事板一個ID,然後以編程方式加載它,然後使用instantiateViewControllerWithIdentifier加載VC,然後執行上述操作。但無論如何,感謝您指出「presentedViewController」方法,力德知道這個。 – CodeTry

相關問題