点击后更改 UIButton 边框颜色

Change UIButton border color after tapping it

我自定义了自己的按钮。我想在点击按钮时更改按钮的文本颜色和边框颜色。我通过以下代码重写 UIButton setHighlighted 方法

if (highlighted) {
    self.layer.borderColor = [[UIColor colorWithRed:0.447 green:0.443 blue:0.443 alpha:1.000] CGColor];
    self.titleLabel.textColor = [UIColor colorWithRed:0.447 green:0.443 blue:0.443 alpha:1.000];
}
else{
    self.layer.borderColor = [[ UIColor whiteColor] CGColor];
    self.titleLabel.textColor = [UIColor whiteColor];
}

但是,当我只是点击按钮时它不会起作用,并且当我在按钮上移动时它会改变颜色。 我尝试创建断点来检查是否可以正确输入此函数。我观察到这些代码会在我点击按钮时执行一次(由 touchbegan 事件触发),但当我进一步移动时会执行两次(由 touchbegan, touchmove 事件触发)。

我也尝试在视图级别添加操作:

[downloadBtn addTarget:self action:@selector(allDownloadBtnClicked:) forControlEvents:UIControlEventTouchUpInside];
[downloadBtn addTarget:self action:@selector(allDownloadBtnHighlighted:) forControlEvents:UIControlEventTouchDown];

但是还是不能按照我的预期操作

任何人都可以给我任何建议来实现我的目标吗?谢谢!

试试这个。

- (instancetype)init
{
    self = [super init];
    if (self) {
        [self addCustomFeature];
    }
    return self;
}

- (void)awakeFromNib
{
    [super awakeFromNib];
    [self addCustomFeature];
}

#pragma mark CustomizeUI
- (void)addCustomFeature
{
    // creating curved corners
    [self.layer setCornerRadius:5];
    [self.layer setMasksToBounds:YES];

}

- (void)setBorderColor:(UIColor *)borderColor
{
    [self.layer setBorderWidth:1.0f];
    [self.layer setBorderColor:borderColor.CGColor];
}

- (void) setHighlighted:(BOOL)highlighted {
    [super setHighlighted:highlighted];
        if (highlighted) {
            self.borderColor = [UIColor redColor];
        }
        else {
            self.borderColor = [UIColor greenColor];
        }
}

您可以在内部修饰方法中更改所选标志:

- (void)allDownloadBtnClicked:(UIButton*)sender{ 
    sender.selected = !sender.selected;
    ...
}

并改写 setSelected 函数

- (void) setSelected:(BOOL)selected{
    [super setSelected:selected];
    if (selected) {
        self.layer.borderColor = [[UIColor colorWithRed:0.447 green:0.443 blue:0.443 alpha:1.000] CGColor];
        self.titleLabel.textColor = [UIColor colorWithRed:0.447 green:0.443 blue:0.443 alpha:1.000];
    }
    else{
        self.layer.borderColor = [[ UIColor whiteColor] CGColor];
        self.titleLabel.textColor = [UIColor whiteColor];
    }
}