如何自定义 UIAlertView?苹果会批准吗?

Posted

技术标签:

【中文标题】如何自定义 UIAlertView?苹果会批准吗?【英文标题】:How to customize UIAlertView? Will Apple approve it? 【发布时间】:2011-04-19 13:41:19 【问题描述】:

我正在使用自定义 UIAlertViewUITextField 从用户那里获取密码。

我被告知此自定义视图可能会导致我的应用程序被 Apple 拒绝;那是对的吗?如果是这样,我的自定义控件的合适替代品是什么?

【问题讨论】:

为什么你的应用会被苹果拒绝? @Nick Weaver:回到我项目的第一阶段,我正在寻找带有密码 UITextField 的自定义 UIAlertView,论坛提交者指出这可能违反 APPLE 政策,因为用户可能认为这是网络密码的 Wifi 对话框。 啊,我明白了,很有趣。不管怎样,你为什么不展示一个与 Apple 使用的 UIAlertView 的外观和感觉确实不同的模态视图。 @Nick Weaver:感谢您的建议,我将尝试那些已经过测试并正在实际应用程序中工作的自定义视图。 【参考方案1】:

您可以向 UIAlertView 添加文本字段

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"title" message:@"msg" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil];
UITextField *txtField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)];
[alertView addSubview:txtField];
[alertView show];
[alertView release];

【讨论】:

非常感谢你的帖子,我这样做是零问题,我担心的是这违反了苹果发布 iPhone 应用程序的政策。【参考方案2】:

请参阅我的blog post 这样做以及苹果完全接受的代码。我在我的一些应用程序中添加了这个,它们都被接受了。所以不要害怕使用它!

这里是你可以使用的代码:

UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Your title here!" message:@"this gets covered" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
UITextField *myTextField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)];
[myTextField setBackgroundColor:[UIColor whiteColor]];
[myAlertView addSubview:myTextField];
CGAffineTransform myTransform = CGAffineTransformMakeTranslation(0.0, 130.0);
[myAlertView setTransform:myTransform];
[myAlertView show];
[myAlertView release];

【讨论】:

【参考方案3】:

查看下面的博客教程以获得完整的解决方案。

http://junecloud.com/journal/code/displaying-a-password-or-text-entry-prompt-on-the-iphone.html?cmd=success#comment3870

【讨论】:

【参考方案4】:

如果您担心被拒绝,您可以随时滚动您自己的视图,该视图具有类似于UIAlertView 的动画。在这里检查这个问题:

How can I customize an ios alert view?

【讨论】:

【参考方案5】:

iOS 5 现在原生支持这一点。查看 UIAlertView 的 alertViewStyle 属性。

【讨论】:

谢谢,我知道这个新功能,我已经切换到它了。【参考方案6】:

引用class reference

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

在我看来,最后一句话是他们不希望开发人员修改视图。

【讨论】:

【参考方案7】:

我认为有更好的方法来解决这个问题。这是代码sn-p

UIAlertView *passwordAlert = [[UIAlertView alloc]                                       
                              initWithTitle:@"Enter Password" message:@""
                              delegate:self 
                              cancelButtonTitle:nil                    
                              otherButtonTitles:@"Submit", nil];

passwordAlert.alertViewStyle = UIAlertViewStyleSecureTextInput;

(可以在prodeveloper博客中找到相关实现)

但这仅适用于 iOS 5.0 及更高版本。请记下它。苹果肯定会批准它。

【讨论】:

【参考方案8】:

Ya Apple 批准 UIAlertview 的自定义。 从 iOS 5.0 开始,苹果提供了 alertview 类型来获取凭据输入。

这里我列出了一个自定义的警报视图,它能够在旧的 ios 版本和方向上工作 custom alertview

谢谢,

纳文山

【讨论】:

以上是关于如何自定义 UIAlertView?苹果会批准吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以自定义 UIAlertView [iPhone iOs 4] 吗?

iPhone中真正的模态UIAlertView?

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

看起来像 UIAlertView 的自定义视图

UIAlertView里面的UIView

iOS 5 UIAlertView 自定义 [重复]