点击后更改 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];
}
}
我自定义了自己的按钮。我想在点击按钮时更改按钮的文本颜色和边框颜色。我通过以下代码重写 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];
}
}