从其他视图控制器

时间:2016-09-16 11:26:55

标签: ios objective-c uipopovercontroller

我有一个NavigationController,有2个小节按钮,比如p1,p2,每个按下时都会显示一个演示文稿。

按下弹出窗口中的任何位置或关闭按钮时,弹出窗口成功关闭。

但是,让我们说如果按p2 - > p2 popover显示。在此之后,如果我按p1然后p2弹出窗口没有关闭,我必须按下外面的任何地方先关闭p1然后再按p2显示p2。

如何一次关闭p1并在一次按下p2时显示p2?

我需要从p2到p1使用NSNotification还是可以采用其他方法?

我没有按钮的IBaction例程,并且直接使用了故事板segue。我相信,我必须检查p1是否在p2 viewdidload中显示,然后删除p1,反之亦然。这是我没有得到的。这该怎么做 。

2 个答案:

答案 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.
        }];
    }
}
相关问题