防止在 iPad 上意外关闭 U​​IActionSheet

Posted

技术标签:

【中文标题】防止在 iPad 上意外关闭 U​​IActionSheet【英文标题】:Prevent accidental dismissal of UIActionSheet on iPad 【发布时间】:2012-09-07 12:47:01 【问题描述】:

我正在使用 UIActionSheet 在 iPad 应用程序中向用户呈现两个选项。用户选择一个或其他选项,UIActionSheetDelegate 处理其余的。但是,如果用户不小心点击了 iPad 屏幕上的任何其他位置,UIActionSheet 会自动关闭,并且两个选项都不会被选中。如何防止 UIActionSheet 自动关闭,从而强制用户选择两个选项之一?

【问题讨论】:

操作表是否在 UIPopover 中? 【参考方案1】:

如果操作表位于 UIPopover 内,解决方法是使用 UIPopoverDelegate 来阻止弹出框在操作表存在时关闭。另一种解决方案是使用 UIAlertView 代替,除了与警报交互之外,它不会允许任何事情发生。可能不是您的解决方案。如果您触摸屏幕的不同部分,我不知道 UIActionSheet 会自行关闭的任何其他方式。

为操作表可见时创建一个 BOOL 变量

BOOL actionSheetVisible; //in header file

//in @implementation file
-(void)displayAlert 
    actionSheetVisible = YES;
    //code to display UIAction sheet...


#pragma mark PopoverControllerDelegate method
-(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popover 
    if (actionSheetVisible) 
        return NO;
    
    return YES;


#pragma mark UIAlerViewDelegate
...actionSheet:(UIActionSheet *)sheet selectedObjectAtIndex:(NSUInteger)index  ... //not sure what this method is at the moment
    actionSheetVisible = NO;
    //handle action sheet

【讨论】:

是的,它在 UIPopover 中,因为在 iPad 上使用时它通常会自动出现(即我自己没有将它放在 UIPopover 中)。因此,如果我继续让我的类符合 UIPopoverDelegate,那么我该如何防止弹出框在屏幕外被点击时意外关闭? 查看我的编辑,您只需确保将 popoverController 委托设置为 self/您管理 UIActionSheet 的类 谢谢。我试了一下。不幸的是, popoverControllerShouldDismissPopover 没有被调用。操作表的委托是自我,但我不知道我会在哪里声明它包含在其中的弹出框的委托。通常,如果您使用它,您会专门识别弹出框的代表。在这种情况下,我不是自己创建弹出框,它是与操作表一起免费提供的。我将如何设置它的委托? 你在使用来自 GitHub 的自定义类吗?这是一个 iPad 问题,对吧? 是的,iPad。没有自定义类或任何花哨的东西。我只是以通常的方式分配和初始化一个 UIActionSheet 并使用 showFromRect 呈现它。 iPad 操作系统会自动为操作表创建一个小弹出框。【参考方案2】:

如何将手势控制器添加到不执行任何操作的应用程序窗口?或者尝试将其添加到工作表下方的视图中?确保完成后将其删除;)

【讨论】:

【参考方案3】:

我将抛​​出另一个想法 - 在您显示操作表之前,将覆盖整个屏幕的透明视图添加到窗口,然后设置视图。 userInteractionEnabled = NO,然后在关闭操作表时移除视图。 [我没有在 iPad 上测试过,但在手机上使用过这种技术]

【讨论】:

很遗憾,使用此方法仍会关闭操作表。

以上是关于防止在 iPad 上意外关闭 U​​IActionSheet的主要内容,如果未能解决你的问题,请参考以下文章

苹果:只有iPhone才会降频 iPad/Mac不受影响

苹果:降频事件仅限iPhone,与iPad/Mac无关!

Xcode - 意外的连接关闭[关闭]

Qt关闭QMainWindow后如何防止崩溃?

浏览器窗口意外关闭时发出警报

iphone/ipad 触发意外的调整大小事件