Pan*_*hla 33 iphone xcode objective-c ipad
我想在点击时更改按钮颜色.我用了 :
[button setBackgroundColor:[UIColor redColor]];
Run Code Online (Sandbox Code Playgroud)
但这只显示按钮的四个角上的红色而不是整个按钮,当我使用时forState:UIControlStateNormal,应用程序挂起.点击时按钮是否可以显示某些颜色?
[click1 setBackgroundColor:[UIColor redColor] forState:UIControlStateHighlighted];
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
Hen*_*rik 38
您可以以编程方式创建图像,因此可以以动态方式使用颜色:
使用此方法为UIButton创建一个类别,并确保通过@import QuartzCore以下方式导入QuartzCore lib :
- (void)setColor:(UIColor *)color forState:(UIControlState)state
{
UIView *colorView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
colorView.backgroundColor = color;
UIGraphicsBeginImageContext(colorView.bounds.size);
[colorView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *colorImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[self setBackgroundImage:colorImage forState:state];
}
Run Code Online (Sandbox Code Playgroud)
这将为您指定的颜色创建一个具有按钮大小的图像,然后将其指定为希望状态.由于使用了backgroundImage,您仍然可以通过setTitle:forState:方法为按钮设置标题.
Ond*_*rej 14
这就是我做的...它是UIButton的自定义子类,只需设置正常和突出显示的颜色,并且所有内容都可以正常工作;)
头文件:
//
// FTCustomButton.h
// FTLibrary
//
// Created by Ondrej Rafaj on 14/01/2013.
// Copyright (c) 2013 Fuerte International. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface FTCustomButton : UIButton
@property (nonatomic, strong, readonly) UIColor *normalColor;
@property (nonatomic, strong, readonly) UIColor *highlightedColor;
- (void)setNormalColor:(UIColor *)normalColor;
- (void)setHighlightedColor:(UIColor *)highlightedColor;
@end
Run Code Online (Sandbox Code Playgroud)
这是实现文件:
//
// FTCustomButton.m
// FTLibrary
//
// Created by Ondrej Rafaj on 14/01/2013.
// Copyright (c) 2013 Fuerte International. All rights reserved.
//
#import "FTCustomButton.h"
//*****************************************************************************
// private interface declaration
//*****************************************************************************
@interface MCSelectionButton ()
@property(nonatomic, strong, readwrite) UIColor *normalColor;
@property(nonatomic, strong, readwrite) UIColor *highlightedColor;
@end
//*****************************************************************************
// public interface implementation
//*****************************************************************************
@implementation FTCustomButton
#pragma mark Settings
- (void)setNormalColor:(UIColor *)normalColor {
[self setBackgroundColor:normalColor];
_normalColor = normalColor;
}
- (void)setHighlightedColor:(UIColor *)highlightedColor {
_highlightedColor = highlightedColor;
}
#pragma mark Actions
- (void)didTapButtonForHighlight:(UIButton *)sender {
[self setBackgroundColor:_highlightedColor];
}
- (void)didUnTapButtonForHighlight:(UIButton *)sender {
[self setBackgroundColor:_normalColor];
}
#pragma mark Initialization
- (void)setupButton {
[self addTarget:self action:@selector(didTapButtonForHighlight:) forControlEvents:UIControlEventTouchDown];
[self addTarget:self action:@selector(didUnTapButtonForHighlight:) forControlEvents:UIControlEventTouchUpInside];
[self addTarget:self action:@selector(didUnTapButtonForHighlight:) forControlEvents:UIControlEventTouchUpOutside];
}
- (id)init {
self = [super init];
if (self) {
[self setupButton];
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
[self setupButton];
}
return self;
}
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self setupButton];
}
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
Dig*_*ohn 13
确保按钮类型是自定义的,如其他人已经说明的那样.然后执行以下操作将带回那些圆角:
[self.myButton.layer setCornerRadius:8.0f];
[self.myButton.layer setMasksToBounds:YES];
[self.myButton.layer setBorderWidth:1.0f];
[self.myButton.layer setBorderColor:[[UIColor whiteColor] CGColor]];
self.myButton.backgroundColor = [UIColor redColor];
Run Code Online (Sandbox Code Playgroud)
虽然,就个人而言,我是纯色渐变按钮的忠实粉丝......同时,背景颜色没有不同的状态,而背景图像则:
[self.myButton setBackgroundImage:[UIImage imageNamed:@"gradient.png"] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
使用图像,您的按钮会随着选择而变暗(或者您可以为每个状态提供不同的背景图像以执行不同的操作).背景颜色不会发生这种情况,背景将始终保持不变,只有按钮标签在每个状态下更改.
完成Dima的回答,我在Swift中实现了一个扩展:
extension UIButton {
private func imageWithColor(color: UIColor) -> UIImage {
let rect = CGRectMake(0.0, 0.0, 1.0, 1.0)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
CGContextSetFillColorWithColor(context, color.CGColor)
CGContextFillRect(context, rect)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
func setBackgroundColor(color: UIColor, forUIControlState state: UIControlState) {
self.setBackgroundImage(imageWithColor(color), forState: state)
}
}
Run Code Online (Sandbox Code Playgroud)
您为按钮拍摄了红色图像,然后可以在用户单击时设置它
[yourButtonName setBackgroundImage:[UIImage imageNamed:@"yourRedButton.png"] forState:UIControlStateHighlighted];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57040 次 |
| 最近记录: |