这个让我难过。
是否有可能在iPhone的Cocoa中更改UIButton的背景颜色。我尝试过设置背景颜色,但只改变了角落。 setBackgroundColor:
似乎是唯一可用于此类事情的方法。
[random setBackgroundColor:[UIColor blueColor]];
[random.titleLabel setBackgroundColor:[UIColor blueColor]];
这可以通过制作副本以编程方式完成:
loginButton = [UIButton buttonWithType:UIButtonTypeCustom];
[loginButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
loginButton.backgroundColor = [UIColor whiteColor];
loginButton.layer.borderColor = [UIColor blackColor].CGColor;
loginButton.layer.borderWidth = 0.5f;
loginButton.layer.cornerRadius = 10.0f;
编辑:当然,你必须#import <QuartzCore/QuartzCore.h>
编辑:对于所有新读者,您还应该考虑添加一些选项作为“另一种可能性”。供您考虑。
由于这是一个陈旧的答案,我强烈建议阅读评论以进行故障排除
你也可以在按钮上添加一个CALayer - 你可以用这些包括颜色叠加来做很多事情,这个例子使用一个普通的颜色层,你也可以轻松地研究颜色。请注意,虽然添加的图层会遮盖下面的图层
+(void)makeButtonColored:(UIButton*)button color1:(UIColor*) color
{
CALayer *layer = button.layer;
layer.cornerRadius = 8.0f;
layer.masksToBounds = YES;
layer.borderWidth = 4.0f;
layer.opacity = .3;//
layer.borderColor = [UIColor colorWithWhite:0.4f alpha:0.2f].CGColor;
CAGradientLayer *colorLayer = [CAGradientLayer layer];
colorLayer.cornerRadius = 8.0f;
colorLayer.frame = button.layer.bounds;
//set gradient colors
colorLayer.colors = [NSArray arrayWithObjects:
(id) color.CGColor,
(id) color.CGColor,
nil];
//set gradient locations
colorLayer.locations = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0f],
[NSNumber numberWithFloat:1.0f],
nil];
[button.layer addSublayer:colorLayer];
}
为qazxsw poi添加qazxsw poi的第二个目标并更改qazxsw poi背景颜色。然后在UIButton
目标中将其更改回来;
对于专业和漂亮的按钮,你可以检查这个UIControlEventTouched
。您可以直接在视图和表格视图中使用它,也可以修改源代码以满足您的需求。希望这可以帮助。
这不像UIButton子类那么优雅,但是如果你只是想要快速的东西 - 我做的是创建自定义按钮,然后是1px x 1xx图像,我想要按钮的颜色,并设置背景突出显示状态的图像按钮 - 适合我的需要。
我知道这是很久以前的问题,现在有一个新的UIButtonTypeSystem。但是更新的问题被标记为这个问题的重复,所以这是我在iOS 7系统按钮上下文中的新答案,使用UIButton
属性。
UIControlEventTouchUpInside
可以通过这种方式更改或继续使用Storyboard并更改右侧选项的背景。
斯威夫特3:
.tintColor
我有一个不同的方法,
[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,
+ (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>
我假设你在谈论与UIButtonTypeRoundedRect
的UIButton?你无法改变它的背景颜色。当您尝试更改它的背景颜色时,您更改的是绘制按钮的矩形颜色(通常很清楚)。所以有两种方法可以去。您可以子类化UIButton并覆盖其-drawRect:
方法,也可以为不同的按钮状态创建图像(这样做非常好)。
如果在Interface Builder中设置背景图像,您应该注意到IB不支持为按钮可以拥有的所有状态设置图像,因此我建议使用以下代码设置图像:
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行)。
另一种可能性
但是,按钮是方形的,这不是我们想要的。创建一个带有此按钮引用的IBOutlet,并将以下内容添加到viewDidLoad方法:
[buttonOutlet.layer setCornerRadius:7.0f];
[buttonOutlet.layer setClipToBounds:YES];
不要忘记导入QuartzCore.h
子类UIButton并覆盖setHighlighted和setSelected方法
-(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类
-(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];
}
如果您不想使用图像,并希望它看起来与圆角矩形样式完全相同,请尝试此操作。只需在UIButton上放置UIView,使用相同的框架和自动调整大小的蒙版,将alpha设置为0.3,并将背景设置为颜色。然后使用下面的代码片段从彩色叠加视图中剪切圆角边缘。此外,取消选中UIView上IB中的“User Interaction Enabled”复选框,以允许触摸事件级联到下面的UIButton。
一个副作用是你的文字也会着色。
#import <QuartzCore/QuartzCore.h>
colorizeOverlayView.layer.cornerRadius = 10.0f;
colorizeOverlayView.layer.masksToBounds = YES;
另一种可能性(最好和最美丽的imho):
在Interface Builder中使用所需背景颜色的2个段创建UISegmentedControl。将类型设置为“bar”。然后,将其更改为只有一个段。 “接口”构建器不接受一个段,因此您必须以编程方式执行此操作。
因此,为此按钮创建一个IBOutlet并将其添加到视图的viewDidLoad:
[segmentedButton removeSegmentAtIndex:1 animated:NO];
现在你有一个漂亮的光泽彩色按钮,具有指定的背景颜色。对于操作,请使用“value changed”事件。
(我在http://chris-software.com/index.php/2009/05/13/creating-a-nice-glass-buttons/上发现了这个)。谢谢克里斯!
好吧,我百分之九十九,你不能只是去改变UIButton的背景颜色。相反,你必须自己去改变背景图像,我觉得这很痛苦。我很惊讶我必须这样做。
如果我错了或者如果有更好的方法而不必设置背景图片,请告诉我
[random setBackgroundImage:[UIImage imageNamed:@"toggleoff.png"] forState:UIControlStateNormal];
[random setTitleColor:[UIColor darkTextColor] forState:UIControlStateNormal];
[random setBackgroundImage:[UIImage imageNamed:@"toggleon.png"] forState:UIControlStateNormal];
[random setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
根据@EthanB建议和@karim制作一个后面填充的矩形,我刚刚为UIButton创建了一个类别来实现这个目的。
只需输入分类代码:https://github.com/zmonteca/UIButton-PLColor
用法:
[button setBackgroundColor:uiTextColor forState:UIControlStateDisabled];
可选forStates使用:
UIControlStateNormal
UIControlStateHighlighted
UIControlStateDisabled
UIControlStateSelected