如何创建自定义UIAlertView

时间:2009-11-19 18:40:29

标签: iphone objective-c cocoa-touch

我们正在创建一个沉浸式应用程序,需要具有与UIAlertView非常相似的东西,但我们不希望它看起来像系统对话框,我们想要使用我们自己的图形。我完成了很大一部分工作,但是我遇到了一些障碍:

  1. 如何让UIView显示在状态栏上方(这样我可以像UIAlertView一样变暗)?这可能吗?我已将其添加到窗口中,但它仍显示在状态栏下方。

  2. 如何将其显示为部分透明但文字仍然完全不透明?我希望它显示类似于UIAlertView,因为它应该是半透明的,但如果我将alpha设置为.8,那么也会减少子视图的alpha。如果我只减少背景图像的alpha,则按钮显示为不透明。如果我减少背景图像和按钮的alpha,则按钮看起来不像是嵌入在背景图像中。我非常希望不必为每个嵌入式按钮排列创建不同的图像

  3. 编辑:我还没有找到状态栏问题的解决方案,但我注意到标准的UIAlertView出现在自己的UIWindow中,当我调查它时,我发现windowLevel属性:

    const UIWindowLevel UIWindowLevelNormal;
    const UIWindowLevel UIWindowLevelAlert;
    const UIWindowLevel UIWindowLevelStatusBar;
    

    将我自己的UIWindow与UIWindowLevelAlert一起使用仍然没有显示在状态栏上方。我没有尝试UIWindowLevelStatusBar

6 个答案:

答案 0 :(得分:5)

您需要创建一个新窗口,您可以在其中放置警报视图:

UIWindow *alertWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // you must release the window somewhere, when you do not need it anymore
alertWindow.windowLevel = UIWindowLevelAlert; // puts it above the status bar
alertWindow.backgroundColor = [UIColor clearColor];
UIViewController *alertVC = [[[YourAlertViewController alloc] init] autorelease];
[alertWindow setRootViewController:alertVC];
[alertWindow setHidden:NO];

答案 1 :(得分:3)

似乎是一篇旧帖子,但如果你点击此页面寻找答案,请查看

http://joris.kluivers.nl/iphone-dev/?p=CustomAlert

答案 2 :(得分:0)

如果UIAlertView的默认行为适合您,我建议您更改对话框的默认外观。例如,您可以使用this discussion中的示例代码并提供自己的图像。

答案 3 :(得分:0)

如何让UIView显示在状态栏上方(这样我可以像UIAlertView那样变暗)?这可能吗?

我认为Apple不会将此版本提供给UIAlertView的非UIView子类。

UIAlertViewUIView的子类。您是否尝试使用自己的绘图代码对UIAlertView进行子类化并覆盖-drawRect:

答案 4 :(得分:0)

如何在显示警报时隐藏状态栏来解决此问题?无论如何,这会让它更“自由”......

答案 5 :(得分:0)

对于不透明度问题:您是否考虑将按钮图形嵌入到背景图像中,并使按钮控制自己透明,每次按下或释放按钮时都会更改背景图像?