【问题标题】:Change UIButton border color after tapping it点击后更改 UIButton 边框颜色
【发布时间】:2015-07-06 09:29:21
【问题描述】:

我已经自定义了自己的按钮。当我点击它时,我想更改按钮的文本颜色和边框颜色。我通过以下代码覆盖了 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];

但还是不能按我的预期运行。

谁能给我任何建议以实现我的目标?谢谢!

【问题讨论】:

  • 你为你的按钮设置了 self.layer.borderWidth = 2.0f 吗?
  • 我在 layoutSubviews 中设置了borderWidth。

标签: ios objective-c uibutton


【解决方案1】:

试试这个。

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

【讨论】:

  • 我在 layoutSubviews 函数中设置了borderWidth。而且答案还是不行。
  • @kuokuo321:你调用超类方法了吗?
  • layoutSubviews 和 setHighlighted 我都先调用了超类方法。
  • @kuokuo321:尝试在 setHighlighted 方法中设置borderWidth。
  • 点击这个按钮还是不行。顺便说一句,我设置了 showTouchwhenHighlighted = YES,我可以看到带有点击效果的按钮,但边框保持白色......
【解决方案2】:

您可以在 touch up inside 方法中更改选定的标志:

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

【讨论】:

  • 我试过这个方法,结果是可以进入这个函数但是不能改变边框颜色。顺便说一句,我使用 Xcode 6.4 并连接到我的 iPhone 6+ 来测试这个功能。
  • @kuokuo321 只有borderColor 不起作用? textColor 设置好了吗?
猜你喜欢
  • 2012-10-01
  • 1970-01-01
  • 2020-03-07
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多