【问题标题】:Customizing UIAlertView自定义 UIAlertView
【发布时间】:2010-10-07 18:46:51
【问题描述】:

任何人都有代码来做这个:


(来源:booleanmagic.com

或者更好的是,使用 UIAlertView 对象的带有图像的 3x2 按钮网格?

我不关心文本字段,它是我想要的网格中的按钮(最好是图像而不是文本)。

【问题讨论】:

    标签: iphone uialertview


    【解决方案1】:

    我认为最好的办法是忘记自定义 UIAlert 视图并自己构建自定义视图。

    首先,您所显示的实际上并不是“警报”,因此它与 UIAlertView 的设计目的背道而驰。这意味着您正在更改用户的 UI 范例,这绝不是一个好主意。

    其次,将自定义视图设置为动画比尝试破解 UIAlertView 让它做你想做的事情要容易得多。

    【讨论】:

    • 不仅如此,尝试自定义 UIAlertView 也是导致您的应用被 Apple 持续拒绝的原因之一。
    【解决方案2】:

    首先,您需要将警报框放大以容纳您的控件,但它必须放在中心。

    为此,您无需设置帧大小,而是将带有“\n”的消息文本作为 necc。例如:

    alert = [[UIAlertView alloc] initWithTitle:@"Rate this picture."
    message:@"Tap a star to rate.\n\n\n\n " /*------ look at here!!----*/
    delegate:self
    cancelButtonTitle:nil
    otherButtonTitles:nil];
    

    然后为警报视图使用 UIAlertViewDelegate。

    覆盖它的 viewWillAppear: 添加您的按钮并将其框架手动设置在所需位置。

    或者: 使用视图控制器创建一个完整的视图,并将该视图添加到警报框中,例如:

    [myalertview addSubvew:mycomplexalert];
    

    希望这会对您有所帮助:)

    我正在使用警报框通过星图、推特、fb 反馈等进行评分输入。

    更新 iOS7:

    对于 iOS 7,使用组件创建自己的视图并将其设置为 alertview 的附属视图:

    [alert setValue:imageView forKey:@"accessoryView"]; 
    

    这很简单:-)

    【讨论】:

    • "\n\n\n\n" hack 似乎不适用于当前的 iOS 7 Beta 1 版本!我不确定这是否会在最终的 iOS 7 中改变..
    • 对于iOS 7,创建自己的视图并将其设置为alertview的附件视图:[alert setValue:imageView forKey:@"accessoryView"];
    • 我认为“accesoryView”不能公开访问可能是有原因的。所以这可能会在未来的版本中中断,或者可能会被 Apple 拒绝。
    • 对,可能它仍然不稳定,但他们在 WWDC 2013 上展示了(忘记了哪个视频),所以他们可能不会拒绝。在 iOS8 测试版上,它不起作用 - 即使在带有附件视图的系统警报中:/
    【解决方案3】:

    This tutorial 介绍了如何继承 UIAlertView 来实现输入文本框。它解释了如何放大视图、添加子视图(如文本框或图像)以及进行转换以将框在屏幕上向上移动。

    【讨论】:

    • 这并没有讨论如何更改视图的大小,但它有助于展示如何添加文本框并使用输入的内容。
    【解决方案4】:

    我写了一个几乎像素完美的 UIAlertView 替代品,它也是完全可配置的。看看CODialog 是否符合您的需求。

    【讨论】:

    • 那太好了@Erik Aigner.. 但是我刚刚得到了一个使用你的库的旧 (iOS6) 项目,我们需要将它迁移到 iOS7.. 你的库使用 iOS6 的外观/感觉。知道如何升级它以使其看起来/感觉像 iOS 7 吗?
    • @abbood 只是覆盖绘图方法
    • @ugh 伙计,那是很多行代码......你知道苹果是否会接受一个拥有你的库的应用程序,因为他们只会接受针对 iOS 7 编译的代码?
    【解决方案5】:

    没有用于此的内置组件。根据 HIG 文档,UIAlertView 应该只有文本和按钮。

    您必须创建自己的视图并向其添加控件。 SDK 中的 HeadsUpUI 示例展示了如何将自定义菜单式视图显示为叠加层。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-10-14
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多