ios UIButton设置高亮状态下的背景色

Posted 孙富有(iOS工程师)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios UIButton设置高亮状态下的背景色相关的知识,希望对你有一定的参考价值。

一,通过按钮的事件来设置背景色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- (void)viewDidLoad {
    [super viewDidLoad];
     
    UIButton *button1 = [[UIButton alloc] initWithFrame:CGRectMake(50, 200, 100, 50)];
    [button1 setTitle:@"button1" forState:UIControlStateNormal];
    button1.backgroundColor = [UIColor orangeColor];
    [button1 addTarget:self action:@selector(button1BackGroundHighlighted:) forControlEvents:UIControlEventTouchDown];
    [button1 addTarget:self action:@selector(button1BackGroundNormal:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button1];
}
 
//  button1普通状态下的背景色
- (void)button1BackGroundNormal:(UIButton *)sender
{
    sender.backgroundColor = [UIColor orangeColor];
}
 
//  button1高亮状态下的背景色
- (void)button1BackGroundHighlighted:(UIButton *)sender
{
    sender.backgroundColor = [UIColor greenColor];
}

二,通过把颜色转换为UIImage来作为按钮不同状态下的背景图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
- (void)viewDidLoad {
    [super viewDidLoad];
     
    UIButton *button2 = [[UIButton alloc] initWithFrame:CGRectMake(170, 200, 100, 50)];
    [button2 setTitle:@"button2" forState:UIControlStateNormal];
    [button2 setBackgroundImage:[self imageWithColor:[UIColor redColor]] forState:UIControlStateNormal];
    [button2 setBackgroundImage:[self imageWithColor:[UIColor grayColor]] forState:UIControlStateHighlighted];
    [self.view addSubview:button2];
}
 
//  颜色转换为背景图片
- (UIImage *)imageWithColor:(UIColor *)color {
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
     
    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);
     
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
     
    return image;
}

 

1.首先,添加一个按钮在界面上,我们先设置好普通和高亮状态时的文字,还有圆角

    UIButton *button  = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 100, 40)];
    [button setTitle:@"normal" forState:UIControlStateNormal];
    [button setTitle:@"highlighted" forState:UIControlStateHighlighted];
    [button setBackgroundColor:[UIColor redColor]];
    button.layer.cornerRadius = 10.0f;
    button.layer.masksToBounds = YES;
    [self.view addSubview:button];

    // 添加观察者方法
    [self addObserver:button];

2.添加观察者

/**
 *  添加观察者
 *
 *  @param button 需要设置的按钮
 */
- (void)addObserver:(UIButton *)button {
    
    [button addObserver:self forKeyPath:@"highlighted" options:NSKeyValueObservingOptionNew context:nil];
}

3.接下来就是实现观察者方法

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context {
    
    UIButton *button = (UIButton *)object;
    if ([keyPath isEqualToString:@"highlighted"]) {
        if (button.highlighted) {
            [button setBackgroundColor:[UIColor blueColor]];
            return;
        }
        [button setBackgroundColor:[UIColor redColor]];
    }
}

这样我们就能在不使用图片的前提下,实现设置高亮和普通状态下的背景颜色
看下具体的效果


以上是关于ios UIButton设置高亮状态下的背景色的主要内容,如果未能解决你的问题,请参考以下文章

iOS UIButton(按钮)点击改变背景色和标题颜色的简单实现

运行html后为啥点击另一个导航后原来的导航还处于高亮状态,而且导航栏的背景色也没变化?

IOS中button的选中和高亮的区别

怎样修改vim默认的背景颜色

如何禁用 UIButton 的高亮控制状态?

python文本颜色设置