如何创建自定义 UIAlertView

Posted

技术标签:

【中文标题】如何创建自定义 UIAlertView【英文标题】:How to create custom UIAlertView 【发布时间】:2009-11-19 18:40:29 【问题描述】:

我们正在创建一个身临其境的应用程序,它需要具有与UIAlertView 非常相似的功能,但我们不希望它看起来像一个系统对话框,我们希望使用我们自己的图形。我已经完成了大部分工作,但我遇到了一些障碍:

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

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

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

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

使用我自己的 UIWindow 和 UIWindowLevelAlert 仍然没有让它显示在状态栏上方。我没试过UIWindowLevelStatusBar

【问题讨论】:

可能为时已晚,但您可以利用 UIAlertView 而不是编写自己的类。我做了一些子视图挖掘来弄乱按钮等,但我不建议这样做。但是,您可以插入子视图并更改 UIAlertView 的框架,也许这会满足您的需求? UIAlertview 似乎有很多行为,我个人不想复制它。 【参考方案1】:

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

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];

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

UIAlertViewUIView 的子类。您是否尝试过使用自己的绘图代码继承 UIAlertView 并覆盖 -drawRect:

【讨论】:

我接受这个答案不是因为子类化和覆盖 drawRect: 对我有用(它没有。我已经做出了我们不能使用该类的具体声明),而是因为我已经辞职了事实上,Apple 并未提供此功能。【参考方案4】:

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

【讨论】:

我们需要一些不同的东西,所以我们需要自己制作。【参考方案5】:

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

【讨论】:

【参考方案6】:

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

【讨论】:

如果您阅读了我的问题的结尾,请注意我说“我非常希望不必为嵌入按钮的每种排列创建不同的图像” 啊-抱歉,我没听懂。也许在您的背景图像中保留与按钮对齐的空白透明部分? 再一次,每次按钮的对齐方式发生变化时,我都必须有不同的背景图片。

以上是关于如何创建自定义 UIAlertView的主要内容,如果未能解决你的问题,请参考以下文章

如何创建自定义 MKAnnotationView 和自定义注释标题和副标题

如何创建一个自定义的Authentication Provider

如何创建自定义 JQuery 函数以及如何使用它?

如何使用 2 个或更多自定义单元格创建自定义 UICollectionView?

如何从自定义集合视图单元(使用 xib 创建的单元)到 tabBar 控制器创建自定义 segue

如何使用按钮创建自定义集合视图?