将 UIImageview 添加到子视图后,无法单击 UIAlertView 中的按钮

Posted

技术标签:

【中文标题】将 UIImageview 添加到子视图后,无法单击 UIAlertView 中的按钮【英文标题】:Cant click on button in UIAlertView after adding UIImageview to subView 【发布时间】:2013-12-16 12:53:24 【问题描述】:

确定按钮不起作用。 我知道它发生了,因为我添加了 backgroundImageView。 我怎样才能让它工作?

这是我的代码:

UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"clock"]];

backgroundImageView.frame = CGRectMake(0, 0, 282, 200);

backgroundImageView.contentMode = UIViewContentModeScaleToFill;
backgroundImageView.userInteractionEnabled = YES;

[alert addSubview:backgroundImageView];

[alert sendSubviewToBack:backgroundImageView];

[alert show];

【问题讨论】:

试试这个github.com/wimagguc/ios-custom-alertview 同样的代码对我有用。也许一些不同的东西会与你的 alertView 重叠,比如 tapGestureRecognizer 或其他子视图。 ***.com/a/19028950/1545180 参考这个。 【参考方案1】:

不幸的是,Apple 不允许您添加子视图或修改视图层次结构。请参阅https://developer.apple.com/library/ios/documentation/uikit/reference/UIAlertView_Class/UIAlertView/UIAlertView.html 了解:

UIAlertView 类旨在按原样使用,不支持子类化。此类的视图层次结构是私有的,不得修改。

请参阅https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/UIKitUICatalog/UIAlertView.html#//apple_ref/doc/uid/TP40012857-UIAlertView:

警报视图的外观

您无法自定义警报视图的外观。

违反这些规定会导致您的应用在 Apple 审核流程中被拒绝 - 所以我会回去查看您的应用设计。

【讨论】:

【参考方案2】:

Apple 不允许您向UIAlertView 添加子视图。子类化 UIAlertView 不是一个选项,此类不打算被子类化,这样做可能会导致应用被拒绝。

您可以使用来自here 的库来自定义UIAlertView

【讨论】:

【参考方案3】:

不要向UIAlertView 添加子视图,这是不支持的功能。如果您需要创建自定义视图,请找到支持您需要的第 3 部分警报视图解决方案并使用它。

【讨论】:

只是从 iOS 7 开始的简单修正,我们无法自定义标准警报视图。 @Bhumeshwerkatre,它从未受到支持,也不应该被完成 - 这对 iOS7 来说并不新鲜,它在 iOS7 中根本不起作用。 @Wain 虽然我同意它不应该被允许并且现在根本无法完成。苹果有时会允许一个应用程序通过这个过程我有一个旧的应用程序可以做到这一点。但现在这肯定不会发生。 @Popeye,确实,我知道有几个利用这个漏洞。从 Apple 的角度来看,很难审查,因为 iOS6 的第三方实现看起来与内置版本基本相同。【参考方案4】:

Apple 不建议将子视图添加到 UIAlertView 您必须创建自己的警报视图。

【讨论】:

以上是关于将 UIImageview 添加到子视图后,无法单击 UIAlertView 中的按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何知道 UITapGestureRecognizer 是不是已添加到子视图

将 UILabel 粘贴到 UIView 或 UIImageView

将 UILabel 添加到子视图后如何重写它?

将视图添加到子视图

从另一个方法将子视图添加到子视图

将 UIButton 添加到子视图不起作用