自定义 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的主要内容,如果未能解决你的问题,请参考以下文章

Swift 自定义 UIAlertView

自定义 UIAlertView 上的按钮

iOS自定义提示弹出框(类似UIAlertView)

看起来像 UIAlertView 的自定义视图

自定义 UIAlertView iphone

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