没有背景着色的UIActionSheet

时间:2012-07-13 19:51:14

标签: objective-c ios uiview transparent uiactionsheet

所以我读过this post

但它似乎没有处理使背景不是半透明的问题。我希望菜单背后的内容清晰可见。这甚至可能吗?

这就是我目前的

WPSActionSheet *actionSheet = [[WPSActionSheet alloc] initWithCompletion:completion];
  [actionSheet setTitle:@""];
  [actionSheet addButtonWithTitle:@"Take Photo"];
  [actionSheet addButtonWithTitle:@"Choose from Library"];
  [actionSheet addButtonWithTitle:@"Skip This Step"];
  [actionSheet setCancelButtonIndex:2];
  [actionSheet showInView:[self view]];

显示了这个

enter image description here

4 个答案:

答案 0 :(得分:1)

UIActionSheet将始终显示“有色背景”。没有办法解决这个问题。但是,您可以使用UIActionSheet创建自己的UIView版本。

答案 1 :(得分:1)

使用委托方法 -

设置UIActionSheet的alpha和opaque属性
(void)willPresentActionSheet:(UIActionSheet *)actionSheet

,它会随你所见。

答案 2 :(得分:0)

如果您想让UIActionSheet的背景透明,您可以将其子类化并更改layoutSubviews

- (void)layoutSubviews
{
    [super layoutSubviews];


    UIImage* image;
    CGSize size = self.frame.size;
    UIGraphicsBeginImageContext(size);
    image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    [[self layer] setContents:(id)image.CGImage];
}

要添加一些自定义背景,只需将以下代码添加到layoutSubviews:

CGRect frame = self.frame;
frame.origin = CGPointZero;

UIImageView* bg = [[UIImageView alloc] initWithFrame:frame];
bg.image = [UIImage imageNamed@"YOUR/IMAGE/NAME"];

[self addSubview:bg];
[self sendSubviewToBack:bg];

您也可以在委托方法

中执行所有这些操作
- (void)willPresentActionSheet:(UIActionSheet *)actionSheet

只需将自我替换为 actionSheet

答案 3 :(得分:0)

我遇到了同样的问题并找到了解决方法。 UIActionSheet的超级视图包含用于着色的UIView。因此,您可以通过将此视图图层的不透明度设置为0来删除着色。

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet {
    NSArray *subviews = actionSheet.superview.subviews;
    UIView *tintView = [subviews objectAtIndex:0];
    [tintView.layer setOpacity:0.0];
}