2011-09-07 73 views
0

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

UILabel *theTitle = [theAlert valueForKey:@"_titleLabel"]; 

[theTitle setTextColor:[UIColor redColor]]; 

UILabel *theBody = [theAlert valueForKey:@"_bodyTextLabel"]; 

[theBody setTextColor:[UIColor blueColor]]; 

标题的颜色不会改变.. texbody的颜色它的确定。

  1. 如何自定义按钮?
+0

[theAlert valueForKey:@“_ titleLabel”];回报什么? nssstring或uilabel? – Maulik

回答

2

嗨实现使用自定义UIAleartView同样的事情。

  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标题后面的标题。

+0

alreadySubscriber是一个普通的UIButton? alreadySubscriber.layer.cornerRadius = 25.0f;是错误? – Safari

+0

添加#import 来解决它.... – Mohammad

+0

我该如何纠正按照我的自定义警报的大小 按钮的位置? – Safari

2

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

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

这可能是这种情况,看到张贴的链接是一岁。如果您正在处理此问题,则可能需要查看子视图层次结构以查看它们是否仍匹配。

0

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

0

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

苹果可能有一天会改变关键字符串:如果@"_titleLabel"有变化,比如说@"_titleLabelView",你就会沉没,你可能永远不会知道你是沉没的。这可能是拒绝的理由,我不知道。

最好从头开始用自己的自定义视图,子类UIView。只有这样你才能保证这将从操作系统到操作系统稳定。最重要的是,你失去尝试寻找快捷方式的时间将积极花费在构建一些持久的事情上。