UIBarButtonItem + popover segue创建了多个弹出窗口 [英] UIBarButtonItem + popover segue creates multiple popovers

查看:155
本文介绍了UIBarButtonItem + popover segue创建了多个弹出窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前有一个带有UIToolbar的iPad应用程序,其中包含两个UIBarButtonItems,每个UIBarButtonItem都连接到一个popover segue。

I've currently have an iPad app with a UIToolbar containing two UIBarButtonItems, each of which is connected to a popover segue.

当用户触摸其中任何一个时UIBarButtonItems,创建popover而不是切换。这会创建多个重叠的弹出式窗口。我已经能够使用以下代码关闭以前创建的popover

When the user touches either of the UIBarButtonItems, the popover is created rather than toggled. This creates multiple, overlapping popovers. I've been able to close the previously created popover using the following code

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // First close the preferences popover if it's open per Apple guidelines
    if ([self.popoverA.popoverController isPopoverVisible]) {
        [self.popoverA.popoverController dismissPopoverAnimated:YES];
    }

    if ([self.popoverB.popoverController isPopoverVisible]) {
        [self.popoverB.popoverController dismissPopoverAnimated:YES];
    }
    ... code to manage segues ...
}

我还有UIButtons,可以创建正常行为的popover segues。由于与UIBarButtonItems相关联的弹出窗口的这种行为,我的应用程序被拒绝。有人有任何UIToolbar的建议或任何代码示例,其中多个UIBarButtonItem正常工作吗?当用户触摸窗外时,弹出窗口会关闭,

I also have UIButtons which create popover segues which behave normally. Due to this behavior of the popovers associated with UIBarButtonItems, my app is being rejected. Does someone have any suggestions or any code samples of a UIToolbar with multiple UIBarButtonItems that work correctly? The popovers do dismiss when the user touches outside the window,

推荐答案

当你在中收到消息时-prepareForSegue:sender:,取消segue为时已晚。

By the time you get messaged in -prepareForSegue:sender:, it's too late to cancel a segue.

为了有效地执行此操作,您应该从视图控制器本身而不是条形按钮为您的弹出窗口创建segue,以便它们仍然可以以编程方式执行。现在将 UIBarButtonItem 连接到一些有条件地呈现或消除popover的方法。

In order to do this efficiently, you should create segues to your popovers from the view controller itself instead of the bar buttons so that they can still be programmatically executed. Now wire the UIBarButtonItems up to some methods that will conditionally present or dismiss the popover.

- (IBAction)showPopoverA
{
    if (self.popoverA.popoverController.popoverVisible)
        [self.popoverA.popoverController dismissPopoverAnimated:YES];

    [self performSegueWithIdentifier:@"ShowPopoverA"];
}

这篇关于UIBarButtonItem + popover segue创建了多个弹出窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆