UIButton 设置高亮状态的背景颜色

UIButton有普通、高亮、失能、选中四种状态,在公司项目开发中,有时UI给按钮的背景颜色值来区分普通和高亮状态,但是苹果并没有给我们提供设置普通和高亮状态的背景颜色,我们可以利用KVO来实现按钮普通状态和高亮状态的背景颜色,UIButton继承于UIControl,UIControl有个highlighted属性,我们只需要监听这个属性就能实现普通和高亮状态下的背景颜色的切换。

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]];
    }
}

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

button.gif

当然,别忘了移除观察者

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对象继承关系 UIButton 类本身定义继承 UIControl ,描述了在 iOS 上所有用户界面控件的常见基...
    独木舟的木阅读 9,171评论 0 3
  • 1,通过按钮的事件来设置背景色 - (void)viewDidLoad {[superviewDidLoad];U...
    丝丝雨凉阅读 3,846评论 0 0
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,238评论 4 61
  • 朱窗外等风偏来梧桐雨听雨打残荷云弄奇峰牧童横笛款款走出这诗句 残烛湘妃笔宣纸写相思琥珀酒一杯浅酌低吟香消红碎烟树飘...
    泪花香阅读 2,801评论 0 3
  • 单例模式(singleton pattern )是一种在开发中经常用到的设计模式。 模式定义 确保一个类仅有一个实...
    FX_SKY阅读 3,401评论 0 0