我有一个NavigationController
,有2个小节按钮,比如p1,p2,每个按下时都会显示一个演示文稿。
按下弹出窗口中的任何位置或关闭按钮时,弹出窗口成功关闭。
但是,让我们说如果按p2 - > p2 popover显示。在此之后,如果我按p1然后p2弹出窗口没有关闭,我必须按下外面的任何地方先关闭p1然后再按p2显示p2。
如何一次关闭p1并在一次按下p2时显示p2?
我需要从p2到p1使用NSNotification
还是可以采用其他方法?
我没有按钮的IBaction例程,并且直接使用了故事板segue。我相信,我必须检查p1是否在p2 viewdidload中显示,然后删除p1,反之亦然。这是我没有得到的。这该怎么做 。
答案 0 :(得分:0)
请以编程方式首先关闭弹出窗口,然后在延迟(0.2秒)后显示第二个弹出窗口
Step1:解雇第一个Popover
self.popoverController!.dismissViewControllerAnimated(true, completion: nil)
步骤2:延迟后出现第二个弹出窗口
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>
});
答案 1 :(得分:0)
你只需要检查两个按钮动作方法,如果其他弹出窗口已经可见,那么首先解除它然后再显示另一个。
我想说如果按p2 - &gt; p2 popover显示。在此之后,如果我按p1然后首先检查p2是否已经出现,如果它已经存在然后将其关闭并显示p1 ,则对p1应用相同的逻辑。
与此方法类似的东西
- (void) p2 clicked {
if([p1 alreadyPresented]){
dismiss p1;
present p2;
}else{
present p2;
}
}
<强> [UPDATE] 强>
让我们看一个解释其他popovers的例子,我是一个视图控制器A,我有另一个视图控制器B的@property(强,非原子),我可以在我内部定义的任何函数中使用此代码解散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.
}];
}
}