防止一次显示多个 UIPopover

Posted

技术标签:

【中文标题】防止一次显示多个 UIPopover【英文标题】:Prevent more than one UIPopover from being displayed at a time 【发布时间】:2013-05-21 14:51:25 【问题描述】:

我的应用具有月度视图,并且对于该月中的每一天,长按都会显示一个弹出框。

我使用self.view setExclusiveTouch:YES 来防止一次出现多个弹出窗口,但偶尔仍允许出现多个弹出窗口。

如何?

谢谢

【问题讨论】:

【参考方案1】:

首先声明一个 UIPopoverController 类型的属性(比如说 activePopover)。

在长按调用的方法中这样做:

if (self.activePopover != nil)

    if (self.activePopover.popoverVisible)
        [ self.activePopover dismissPopoverAnimated:YES];
    self.activePopover = nil;

然后,当您在长按上分配 UIPopoverController 时,将其分配给 activePopover。 这样一来,您总是会关闭可见的弹出框,然后再呈现一个新的弹出框。

【讨论】:

谢谢。最后是最好的方法。我犯了一些愚蠢的错误,让我迷失了方向【参考方案2】:

您可以禁用弹出框之外的任何交互,方法是在其呈现后将其passthroughViews 属性设置为空数组。

【讨论】:

谢谢。我认为这会奏效,但我犯了一些错误并感到困惑。最后,这不适合我的班级结构【参考方案3】:

全局布尔标志呢?

将其创建为全局类或视图控制器中的属性,并在打开任何弹出窗口之前对其进行检查

FALSE 值初始化它,当你要打开一个弹出窗口时,只需检查它的值:

//In the method that handle the long press to open the popup
if(!self.popUpPresent)

    //open the pop up
    [self openNewPopUp];
    //put the flag
    self.popUpPresent = TRUE;

else
//There is a popup opened, do another stuff or nothing.

每次关闭弹出窗口时不要忘记将其值重新设置为 FALSE

希望对你有帮助

【讨论】:

好主意。我试过了,但不知怎的,我仍然一次显示不止一个弹出窗口! 你在哪里/如何存储那个标志?似乎它可能正在失去它的价值,或者它没有正确设置为 'TRUE' 我正在研究解决方案。其他一些答案有好处,但不知何故,ios 似乎在我不允许第二个弹出框之前识别出额外的触摸。我认为这是一个时间问题 试试“self.popUpPresent = TRUE;”在你的 popUp 的“init”方法中......如果是时间问题,可能会有所帮助

以上是关于防止一次显示多个 UIPopover的主要内容,如果未能解决你的问题,请参考以下文章

如何防止多个子视图控制器一次加载?

如何防止应用程序不显示多个取消消息框?

Flutter:一次多次使用相同的动画小部件

如何防止 map() 在 react-native 中一次渲染整个数组

防止多个可平移的表格视图单元格被平移

锁定文件以防止多个用户访问它的最佳方法是啥