首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >可以更改UIButtons的背景颜色吗?

可以更改UIButtons的背景颜色吗?
EN

Stack Overflow用户
提问于 2010-05-11 15:49:58
回答 15查看 156.8K关注 0票数 107

这把我难倒了。

有没有可能在iPhone的Cocoa中更改UIButton的背景颜色?我试过设置背景颜色,但它只改变了边角。对于这样的事情,setBackgroundColor:似乎是唯一可用的方法。

代码语言:javascript
复制
[random setBackgroundColor:[UIColor blueColor]];
[random.titleLabel setBackgroundColor:[UIColor blueColor]];
EN

回答 15

Stack Overflow用户

发布于 2012-02-17 19:53:09

我有一个不同的方法,

代码语言:javascript
复制
[btFind setTitle:NSLocalizedString(@"Find", @"") forState:UIControlStateNormal];    
[btFind setBackgroundImage:[CommonUIUtility imageFromColor:[UIColor cyanColor]] 
        forState:UIControlStateNormal];
btFind.layer.cornerRadius = 8.0;
btFind.layer.masksToBounds = YES;
btFind.layer.borderColor = [UIColor lightGrayColor].CGColor;
btFind.layer.borderWidth = 1;

来自CommonUIUtility,

代码语言:javascript
复制
+ (UIImage *) imageFromColor:(UIColor *)color {
    CGRect rect = CGRectMake(0, 0, 1, 1);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [color CGColor]);
    //  [[UIColor colorWithRed:222./255 green:227./255 blue: 229./255 alpha:1] CGColor]) ;
    CGContextFillRect(context, rect);
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return img;
}

别忘了#import <QuartzCore/QuartzCore.h>

票数 60
EN

Stack Overflow用户

发布于 2010-05-11 16:52:42

我猜你说的是和UIButtonTypeRoundedRect的UIButton吧?你不能改变它的背景颜色。当你尝试改变它的背景颜色时,你相当于改变了绘制按钮的矩形的颜色(通常是清晰的)。所以有两条路要走。要么子类化UIButton并重写它的-drawRect:方法,要么为不同的按钮状态创建图像(这样做非常好)。

如果你在Interface Builder中设置背景图像,你应该注意到IB并不支持为按钮可能具有的所有状态设置图像,所以我建议在代码中这样设置图像:

代码语言:javascript
复制
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];
[myButton setBackgroundImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
[myButton setBackgroundImage:[UIImage imageNamed:@"disabled.png"] forState:UIControlStateDisabled];
[myButton setBackgroundImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateSelected];
[myButton setBackgroundImage:[UIImage imageNamed:@"higligted.png"] forState:UIControlStateHighlighted];
[myButton setBackgroundImage:[UIImage imageNamed:@"highlighted+selected.png"] forState:(UIControlStateHighlighted | UIControlStateSelected)];

最后一行显示了如何为选中和突出显示状态(这是IB不能设置的状态)设置图像。如果您的按钮不需要选定状态,则不需要选定的图像(第4&6行)。

票数 32
EN

Stack Overflow用户

发布于 2012-05-20 09:37:56

子类化UIButton并重写setHighlighted和setSelected方法

代码语言:javascript
复制
-(void) setHighlighted:(BOOL)highlighted {

  if(highlighted) {
    self.backgroundColor = [self.mainColor darkerShade];
  } else {
    self.backgroundColor = self.mainColor;
  }
  [super setHighlighted:highlighted];
}

-(void) setSelected:(BOOL)selected {

  if(selected) {
    self.backgroundColor = [self.mainColor darkerShade];
  } else {
    self.backgroundColor = self.mainColor;
  }
  [super setSelected:selected];
}

我的darkerShade方法在UIColor类别中,如下所示

代码语言:javascript
复制
-(UIColor*) darkerShade {

  float red, green, blue, alpha;
  [self getRed:&red green:&green blue:&blue alpha:&alpha];

  double multiplier = 0.8f;
  return [UIColor colorWithRed:red * multiplier green:green * multiplier blue:blue*multiplier alpha:alpha];
}
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2808888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档