当用户触摸弹出框外部时,禁用 ipad 上的 ActionSheet 关闭

Posted

技术标签:

【中文标题】当用户触摸弹出框外部时,禁用 ipad 上的 ActionSheet 关闭【英文标题】:Disabling ActionSheet dismiss on ipad when user touches outside popover 【发布时间】:2011-11-11 13:00:45 【问题描述】:

我的应用程序中显示了一个操作表,并且在 iphone 上一切正常。但是,在 ipad 上,它会自动在弹出框内创建操作表,当用户在操作表之外触摸时,我无法让它禁用关闭。

我已更改操作表在 ipad 上的显示方式,现在显示为:

        UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Choose a preloaded picture", @"Use a photo", nil];
    actionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
    actionSheet.tag = 1;
    [actionSheet showFromRect:CGRectMake(100, 0, 300, 300) inView:self.view animated:YES];
    [actionSheet release];

我也试过用。

- (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController

     return NO;

知道当用户在操作表之外触摸时如何阻止 uiactionsheet 弹出框消失吗?

【问题讨论】:

【参考方案1】:

不会调用您的 popoverControllerShouldDismissPopover: 方法,因为它是 UIPopoverControllerDelegate 方法,并且您正在处理 UIActionSheet。由于 UIKit 会自动为您创建弹出框控制器,因此您将没有机会设置它的委托。您可以使用[popoverActionsheet superview] 访问弹出视图本身,但这不会为您提供 UIPopoverController。

从用户体验的角度来看,Apple 会要求你不要实现这样的行为——如果你需要以模态方式呈现选项(在用户做出选择之前它们不会消失),那么用户会更熟悉 UIAlertView,或 a modally-presented view controller of your own。

【讨论】:

以上是关于当用户触摸弹出框外部时,禁用 ipad 上的 ActionSheet 关闭的主要内容,如果未能解决你的问题,请参考以下文章

在 iPad 上的 UIWebView 中定位弹出框

当用户在 iPad 上的 WKWebView 中点击电话号码时如何禁用弹出窗口?

如何正确关闭 UIPopover?

弹出框消失时我可以发出通知吗(iPad)

如何在 iPad 上的 jquery 外部单击关闭菜单

SIGABRT 每次触摸点击,不一致的 iPad iOS