自定义 UIAlertView iphone
Posted
技术标签:
【中文标题】自定义 UIAlertView iphone【英文标题】:Custom UIAlertView iphone 【发布时间】:2011-09-07 09:14:00 【问题描述】:我有一个问题.. 我用这个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]];
title的颜色没有变化..texbody的颜色就可以了。
-
如何自定义按钮?
【问题讨论】:
[theAlert valueForKey:@"_titleLabel"];返回什么? nssstring 还是 uilabel ? 【参考方案1】:嗨,使用自定义 UIAleartView 实现了同样的目标。
如下制作自定义视图。
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];
在 UIAleartView 中插入这个
[self insertSubview:tempView atIndex:0];
[self setNeedsLayout];
覆盖 layoutsubview,因为您已经完成了将所有其他控件下推等于视图高度。
-> 基本上重要的是将 UIAleartView 的标题隐藏在标签后面。
【讨论】:
已经订阅者是一个普通的UIButton?已经订阅者.layer.cornerRadius = 25.0f;是错误吗?? 如何根据自定义警报的大小来更正按钮的位置? 根据您的 tempView 的大小更正按钮位置设置框架。我不确定你是否可以增加 UIAleartView 的宽度,但你可以大胆地设置它的垂直位置。【参考方案2】:不确定您的问题究竟是什么,但我们在尝试锻炼自定义 UIAlertView 时遇到了类似情况,因此可能类似。
您提供的链接中的自定义解决方案似乎通过访问子视图层次结构和“猜测”哪个子视图可能是哪个来操纵警报标题和背景。 (我可能错了,没有仔细看)这种方法的问题是它适用于一个操作系统版本,但在后续的操作系统版本中,Apple 可能会以某种方式重组这个子视图层次结构,而这“猜测”不再准确。 (即假设为背景图像的子视图可能不是)。
可能是这种情况,因为发布的链接已经存在一年了。如果您继续此操作,您可能必须查看子视图层次结构以查看它们是否仍然匹配。
【讨论】:
【参考方案3】:我相信,您可以在不使用 UIAlertView 中提供的标准工具的情况下找到合适的解决方案。但在这种情况下,您的应用程序将不会被 AppStore 批准。这样,我强烈建议您避免在 AlertView 中使用自定义按钮。 也许,您会找到使用 UIActionSheet 而不是 UIAlertView 的解决方案。它更具定制性。
【讨论】:
【参考方案4】:如果@"_titleLabel"
是UIAlertView
层次结构的一部分(看起来很可能带有_
前缀),我不推荐您的方法。
Apple 有朝一日可能会更改关键字符串:如果 @"_titleLabel"
发生更改,请对 @"_titleLabelView"
说,您已经沉没了,您可能永远不会知道自己已经沉没了。这甚至可能是拒绝的理由,我不知道。
最好从头开始使用您自己的自定义视图,子类化UIView
。只有这样,您才能保证从操作系统到操作系统都是稳定的。最重要的是,您在寻找捷径时所浪费的时间将积极地花在构建一些耐用的东西上。
【讨论】:
以上是关于自定义 UIAlertView iphone的主要内容,如果未能解决你的问题,请参考以下文章