自定义 UIAlertView 上的按钮

Posted

技术标签:

【中文标题】自定义 UIAlertView 上的按钮【英文标题】:Customizing the buttons on a UIAlertView 【发布时间】:2012-05-31 07:10:59 【问题描述】:

这是我自定义按钮的当前方式:

UIAlertView *av = [[UIAlertView alloc] init];

[av addButtonWithTitle:@""];
UIButton *yesButton = [av.subviews lastObject];

[av show];

[yesButton setImage:[UIImage imageNamed:@"test.png"] forState:UIControlStateNormal];

这样做的问题是原始视图在我为按钮设置的图像周围仍然可见。它没有完全封装图像。这是我到目前为止的一个例子:

https://www.dropbox.com/s/htb9pfihwmel5oo/testimage.png

有没有办法让图片完全占据整个按钮?

【问题讨论】:

【参考方案1】:

如果您不想要一些不如 Sly Raskal 的答案强大的东西,而只是想要快速破解,那么它的工作方式类似于您现有的代码。你可以做这样的事情..当然你可以改变新的按钮框架来匹配你想要的。此外,您必须将 UIAlertView 定义为一个变量,以便您可以引用它,并在您的 someAction: 方法中将其关闭。

UIAlertView *av = [[UIAlertView alloc] init];
[av addButtonWithTitle:@""];
UIButton *yesButton = [av.subviews lastObject];
[yesButton setHidden:YES];

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[av addSubview:button];
[av show];

[button setImage:[UIImage imageNamed:@"test.png"] forState:UIControlStateNormal];
[button addTarget:av action:@selector(someAction:) forControlEvents:[yesButton allControlEvents]];
[button setFrame:yesButton.frame];

【讨论】:

您先生,真是个天才。谢谢!【参考方案2】:

如果在这种情况下,您所做的只是将按钮设置为不同的样式,但以一种简单的方式,我会按照本教程来完成您正在寻找的效果:

http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-uialertview-custom-graphics/

如果您创建的应用程序是针对 App Store 的,我只想提一下,无论您实施什么更改,请确保它不使用任何私有 API 或违反 HIG 中记录的任何内容。这两种情况中的任何一种都肯定会警告您的应用被拒绝。

【讨论】:

感谢该链接,如果我遇到需要完全自定义 UIAlertView 的情况,我实际上已将其添加为书签。但是现在,我需要做的只是更换按钮,所以以简单的方式接近对我来说已经足够了。

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

带有自定义按钮的自定义 UIAlertView

带有 UITextFields 和 UITextViews 的自定义 UIAlertView

看起来像 UIAlertView 的自定义视图

applicationWillTerminate 问题

试图将 UILabel 放在自定义 UIAlertView 中的 UIButton 之上

如何使 UIAlertView 上的按钮多行显示?