在 iPad 上使用 UIActionSheet 时暗淡并锁定背景

Posted

技术标签:

【中文标题】在 iPad 上使用 UIActionSheet 时暗淡并锁定背景【英文标题】:dim AND lock the background when using UIActionSheet on iPad 【发布时间】:2013-01-03 17:25:33 【问题描述】:

我已经研究了这个问题几个小时,对我来说听起来很简单,但还没有找到可行的解决方案。我有一个 iPad 应用程序,我在其中使用 UIActionSheet 来确认删除。我正在添加一个标签来增加字体大小。一切看起来和工作都很棒。我还需要在操作表可见时调暗和锁定背景。我可以变暗但看不到如何锁定背景,以便用户必须在操作表上进行选择才能将其关闭。我尝试设置 UserInteractionEnabled 但它不起作用。有什么想法吗?

// dim the background
UIView *dimViewDelete = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];
dimViewDelete.backgroundColor = [UIColor blackColor];
dimViewDelete.alpha = 0.3f;
dimViewDelete.tag = 2222;
[self.view addSubview:dimViewDelete];

if ([self.listArray count] > 0)

    // create Action Sheet
    UIActionSheet * action = [[UIActionSheet alloc]
                              initWithTitle:@" "
                              delegate:self
                              cancelButtonTitle:@"Cancel"
                              destructiveButtonTitle:@"Delete"
                              otherButtonTitles:nil];
    [action addButtonWithTitle:@"Cancel"];
    [action setActionSheetStyle:UIActionSheetStyleBlackTranslucent];
    [action showInView:self.view];


    // change the font size of the title
    CGRect oldFrame = [(UILabel*)[[action subviews] objectAtIndex:0] frame];
    UILabel *addTitle = [[UILabel alloc] initWithFrame:oldFrame];
    addTitle.font = [UIFont boldSystemFontOfSize:22];
    addTitle.textAlignment = UITextAlignmentCenter;
    addTitle.backgroundColor = [UIColor clearColor];
    addTitle.textColor = [UIColor whiteColor];
    addTitle.text = @"Are You Sure?";
    [addTitle sizeToFit];
    addTitle.frame = CGRectMake(oldFrame.origin.x, oldFrame.origin.y,
                                oldFrame.size.width, addTitle.frame.size.height);

    [action addSubview:addTitle];

【问题讨论】:

不需要这个。点击操作表弹出框之外的任何地方都被视为“取消”。事实上,取消按钮不会出现在 iPad 上的操作表中。尽管我看到您出于某种原因添加了第二个取消按钮。最好保持操作表的行为一致。如果您真的想要一个暗淡的背景并强制用户点击一个按钮,请改用UIAlertView。您还在攻击操作表的私有内部结构。这是个坏主意。它很脆弱,很可能有一天会破裂。 一厢情愿,我猜。看来我得另辟蹊径了。请让您的评论成为答案,以便我接受。 - 感谢您的及时回复 【参考方案1】:

您最好的选择是实现您自己的自定义操作表类控件。

您需要一个简单的视图控制器,它有两个按钮和一个标签(用于标题)。在弹出窗口中显示视图控制器。使视图控制器模态化,因此只能通过点击其中一个按钮将其关闭。这也会使背景看起来是锁定的。

如果您确实还需要调暗背景,则在显示弹出框之前,将屏幕大小的UIView 添加到主窗口。将此视图的背景设置为[UIColor whiteColor:0 alpha:0.7]。根据需要调整 alpha 以获得正确的调光效果。您甚至可以为视图的 Alpha 设置动画,使其根据需要淡入淡出。

【讨论】:

不错。正是我需要的。谢谢,你太棒了。

以上是关于在 iPad 上使用 UIActionSheet 时暗淡并锁定背景的主要内容,如果未能解决你的问题,请参考以下文章

iPad 上 UIPopoverController 中 UIActionSheet 的自定义背景

在 iPad 上隐藏 UIActionSheet

在 iPad 的 UIActionSheet 中添加 UIPickerView

iPad 上的 UIActionSheet backGroundColor

UIActionSheet showInView 上的 iPad NSInternalInconsistencyException

带有许多按钮的 Xcode iPad UIActionSheet 无法正确显示 iOS7