iPad 上的 UIActionSheet backGroundColor

Posted

技术标签:

【中文标题】iPad 上的 UIActionSheet backGroundColor【英文标题】:UIActionSheet backGroundColor on iPad 【发布时间】:2013-01-24 18:01:13 【问题描述】:

我在一个问题上苦苦挣扎了很长一段时间。由于我并没有真正找到解决方案,我希望这里的人能够帮助我。

我有一个 UIActionSheet,我希望它具有不同的背景颜色。 与

[[myAlert layer] setBackgroundColor:[UIColor redColor].CGColor];

我可以更改警报的大部分颜色。 看起来是这样的:

这就是我初始化 UIActionSheet 的方式:

    UIActionSheet *styleAlert = [[UIActionSheet alloc] initWithTitle:AMLocalizedString(@"SELECT_PICTURE_TITLE", @"Überschrift des Actionsheets")
                                                            delegate:self
                                                   cancelButtonTitle:AMLocalizedString(@"CANCEL_BUTTON_TITLE", @"Abbrechen butten")
                                              destructiveButtonTitle:nil
                                                   otherButtonTitles:AMLocalizedString(@"TAKE_PICTURE_BUTTON_TITLE", @"Bild aufnehmen button"),
                                 AMLocalizedString(@"CAMERA_ROLL_BUTTON_TITLE", @"Aus Bibliothek auswählen"), nil];

    // use the same style as the nav bar
    [styleAlert showInView:self.parentViewController.tabBarController.view];
    //[styleAlert showInView:[self.navigationController view] ];
    [styleAlert release];

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet 
    actionSheet.layer.backgroundColor = GLOBAL_TINT_COLOR.CGColor;

我不知道如何设置相同颜色的边框。有什么想法吗?

提前致谢!

【问题讨论】:

UIAlertView 背景似乎是一张图片。 ***.com/questions/883208/… 请参考帖子:***.com/questions/1181272/…这对你有用。 感谢您的回复!不幸的是,无论我使用图像还是设置图层的背景颜色,我都无法移除边框 你试过这样的事情吗? ***.com/questions/1301909/uiactionsheet-tinting 另外,我之前在 iPad 上遇到过 UIActionSheet 的问题,我认为最好的方法是使用 UIPopoverController。 【参考方案1】:

你不能用不同的颜色重新绘制边框,所以只需删除边框并添加你自己的:

- (void)didPresentActionSheet:(UIActionSheet *)actionSheet 
    UIView *contentView = actionSheet.superview;
    UIView *popoverView = contentView.superview;

    UIView *chromeView;
    for (UIView *v in [popoverView subviews]) 
        if (v.subviews.count == 3) 
            chromeView = v;
            break;
        
    

    for (UIView *backgroundComponentView in [chromeView subviews]) 
        backgroundComponentView.hidden = YES;

        CGRect componentFrame = backgroundComponentView.frame;  // add your view with this frame
    

请注意,这在 *will*PresentActionSheet 中不起作用,因为此时 actionSheet 没有设置 superview

【讨论】:

这正是我所需要的。它看起来还不好看,但是 backgroundView 被删除了,这就是我的问题所在。我只需要用我自己的颜色和东西添加我自己的背景。完成后我会发布一些代码。非常感谢,这真的很有帮助!【参考方案2】:

这适用于 iPhone 主题,它可能也适用于 iPad。

    - (void)willPresentActionSheet:(UIActionSheet *)actionSheet 

        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed@""]];
        imageView.frame = CGRectMake(0, 0, actionSheet.frame.size.width, actionSheet.frame.size.height);
        [actionSheet insertSubview:imageView atIndex:0];
        NSArray *subviews = [actionSheet subviews];
        for (UIView *v in subviews) 
            if ([v isKindOfClass:[UIButton class]]) 
//Theme the buttons on the action sheet
                UIButton *b = (UIButton *)v;
            
            else if ([v isKindOfClass:[UILabel class]]) 
                UILabel *l = (UILabel *)v;
//Theme the label at the top of the action sheet
            
        
    

【讨论】:

感谢您的回答。不幸的是,您的代码与我的代码完全相同,它适用于 iPhone,但不适用于 iPad。无色边框仍然存在 :( 在这段代码中,使用 NSLog 记录子视图,然后尝试查找图像。我猜应该是其中的 2 个,在顶部我以第一个为主题,但在 ipad 上必须有 2 个,所以你需要隐藏它或为其设置图像

以上是关于iPad 上的 UIActionSheet backGroundColor的主要内容,如果未能解决你的问题,请参考以下文章

UIActionSheet 搞砸了 iPad 上的抖动检测(motionBegan:delegate)

UIActionSheet showInView 上的 iPad NSInternalInconsistencyException

具有许多项目的 UIActionSheet 覆盖文本

在 iPad 的 UIActionSheet 中添加 UIPickerView

Monotouch - UIActionSheet 无法在 iPad 上正确显示

iPad 上 UIPopoverController 中 UIActionSheet 的自定义背景