试图将 UILabel 放在自定义 UIAlertView 中的 UIButton 之上

Posted

技术标签:

【中文标题】试图将 UILabel 放在自定义 UIAlertView 中的 UIButton 之上【英文标题】:Trying to place UILabel on top of UIButton in a custom UIAlertView 【发布时间】:2013-06-27 06:39:17 【问题描述】:

我要做的是在UIButton 上放置一个UILabelUIButton 有一个图像作为背景,结果是我看不到UIButton 上的正常文本,因此我想将UILabel 放在它上面。

我的代码是:

NAlertView *customAlert = [[NAlertView alloc] initWithTitle:@"title" message:@"message" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:@"cancel", nil];
[customAlert show];

NAlertView.m:

- (void)layoutSubviews

    for (id obj in self.subviews) //Search in all sub views
    

        if ([obj isKindOfClass:[UIImageView class]]) // Override UIImageView (Background)
         
            UIImageView *imageView = obj;
            [imageView setImage:[UIImage imageNamed:@"CustomAlertView"]];
            [imageView setAlpha:0.7];
            [imageView sizeToFit];
        

        if ([obj isKindOfClass:[UILabel class]]) // Override UILabel (Title, Text)
        
            UILabel *label = (UILabel*)obj;

            label.backgroundColor = [UIColor clearColor];
            label.textColor = [UIColor whiteColor];
            label.shadowColor = [UIColor clearColor];
        

        if ([obj isKindOfClass:[UIButton class]]) // Override the UIButton
        
            UIButton *button = (UIButton*)obj;

            CGRect buttonFrame = button.frame; // Change UIButton size
            buttonFrame.size = CGSizeMake(127, 35);
            CGFloat newYPos = buttonFrame.origin.y + 9; // Change UIButton position
            buttonFrame.origin.y = newYPos;

            button.frame = buttonFrame;

            [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
            [button setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];

            switch (button.tag)
            
                case kFIRST_BUTTON:
                

                    [button setImage:[UIImage imageNamed:@"short_button_gold_off.png"] forState:UIControlStateNormal];
                    [button setImage:[UIImage imageNamed:@"short_button_gold_on.png"] forState:UIControlStateHighlighted];
                
                    break;
                case kSECOND_BUTTON:
                
                    [button setImage:[UIImage imageNamed:@"short_button_black_off.png"] forState:UIControlStateNormal];
                    [button setImage:[UIImage imageNamed:@"short_button_black_on.png"] forState:UIControlStateHighlighted];
                
                    break;
            
        
    

    [self updateConstraints];

结果:

【问题讨论】:

【参考方案1】:

也就是说你只想在 UIButton 上添加 Title?

试试这个 -

  [button setBackgroundImage:[UIImage imageNamed:@"short_button_gold_off.png"] forState:UIControlStateNormal];
  [button setTitle:@"Title" forState:UIControlStateNormal];

【讨论】:

不需要'setTitle',因为它继承自定义本身。 你说的“不需要'setTitle',因为它继承自定义本身?”是什么意思? 当你这样做时:NAlertView *customAlert = [[NAlertView alloc] initWithTitle:@"title" message:@"message" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:@"cancel", nil ]; [customAlert 显示]; ---> 'initWithTitle' 自己设置标题,所以不需要设置标题。【参考方案2】:

替换

[button setImage:[UIImage imageNamed:@"short_button_gold_off.png"] forState:UIControlStateNormal];

[button setBackgroundImage:[UIImage imageNamed:@"short_button_gold_off.png"] forState:UIControlStateNormal];

改变所有这些可能性。

并使用以下方法更改按钮的文本

[button setTitle:@"text" forState:UIControlStateNormal];

希望对你有帮助。

【讨论】:

以上是关于试图将 UILabel 放在自定义 UIAlertView 中的 UIButton 之上的主要内容,如果未能解决你的问题,请参考以下文章

调整 UILabel 的大小以适应自定义 UITableViewCell 中的文本,无论宽度如何

UISlider - 将 UILabel 添加到最小/最大 UIImageView?

如何在 UILabel 中换行

将 UILabel 添加到自定义 UICollectionViewCell 不会出现在 cellForItemAtIndexPath 中

如何让 UILabel 响应 IBAction?

以编程方式将 UILabel 添加到自定义 tableViewCell