自定义UIAlertView iphone

我有一个问题..我使用这个http://kwigbo.com/post/318396305/iphone-sdk-custom-uialertview-background-color来创建我自己的自定义UIAlertView。 我不知道为什么,但这不起作用:

UILabel *theTitle = [theAlert valueForKey:@"_titleLabel"]; [theTitle setTextColor:[UIColor redColor]]; UILabel *theBody = [theAlert valueForKey:@"_bodyTextLabel"]; [theBody setTextColor:[UIColor blueColor]]; 

标题的颜色不会改变.. texbody的颜色没关系。

  1. 如何自定义按钮?

嗨使用自定义UIAleartView实现相同的function。

  1. 制作自定义视图如下。

     UIView *tempView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 5.0f, 262.0, 49)]; tempView.backgroundColor = [UIColor clearColor]; UILabel *lblTitle = [[UILabel alloc] initWithFrame:CGRectMake(12, 0, 262.0, 49)]; lblTitle.font = [UIFont fontWithName:@"Arial" size:22.0f]; lblTitle.textColor = [UIColor whiteColor]; lblTitle.textAlignment = UITextAlignmentCenter; lblTitle.text = @"Subscribe"; lblTitle.backgroundColor = [UIColor clearColor]; [tempView addSubview:lblTitle]; alreadySubscriber = [[UIButton alloc] initWithFrame:CGRectMake(12, 260, 262.0, 50)]; alreadySubscriber.layer.cornerRadius = 25.0f; [alreadySubscriber setTitle:@"Already a subscriber" forState:UIControlStateNormal]; [alreadySubscriber setBackgroundImage:[UIImage imageNamed:@"BTN0.png"] forState:UIControlStateNormal]; [alreadySubscriber setBackgroundImage:[UIImage imageNamed:@"BTN1.png"] forState:UIControlStateSelected]; [tempView addSubview:alreadySubscriber]; 
  2. 将其插入UIAleartView中

     [self insertSubview:tempView atIndex:0]; [self setNeedsLayout]; 
  3. 覆盖layoutsubview,因为你已经完成了将所有其他控件向下推到等于查看高度。

– >基本上就是把UIAleartView的标题隐藏在标签背后。

不确定您的问题究竟是什么,但我们在尝试锻炼自定义UIAlertView时遇到了类似的情况,因此可能类似。

您提供的链接中的自定义解决方案似乎通过访问子视图层次结构并“猜测”哪个子视图可能是哪个来操纵警报标题和背景。 (我可能错了,没详细看过)这种方法的问题是它适用于一个操作系统版本,但在后续操作系统版本中,Apple可能会以某种方式重构这个子视图层次结构,这个’猜测’不再准确。 (即假设子视图可能不是背景图像)。

可能是这种情况,因为发布的链接已有一年之久。 如果您正在进行此操作,则可能必须查看子视图层次结构以查看它们是否仍然匹配。

我相信,您可以在不使用UIAlertView中的标准工具的情况下找到合适的解决方案。 但在这种情况下,您的应用程序将不会批准AppStore。 这样,我强烈建议您,避免在AlertView中使用自定义按钮。 也许,你会找到使用UIActionSheet而不是UIAlertView的解决方案。 它更具定制性。

如果@"_titleLabel"UIAlertView层次结构的一部分(看起来可能是_前缀),我不推荐你的方法。

Apple有朝一日可能会更改关键字符串:如果@"_titleLabel"发生了变化,比如@"_titleLabelView" ,你就会陷入@"_titleLabelView" ,你可能永远不会知道你已经沉没了。 这可能是拒绝的理由,我不知道。

最好从头开始使用自己的自定义视图, UIView 。 只有这样才能保证从操作系统到操作系统的稳定性。 除此之外,你试图找到一个快捷方式的时间将被积极地用于构建一些耐用的东西。