簡體   English   中英

觸摸時更改按鈕的顏色

[英]Changing color of button when touched

我正在嘗試更改按鈕的顏色和圖像。 這就是我所擁有的

 - (IBAction)likeButtonTouched:(UIButton*)sender {
sender.imageView.image = [sender.imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[sender setImage: [UIImage imageNamed:@"Like Filled"] forState:UIControlStateNormal];
[sender setTintColor:secondaryColor];
}

這段代碼可在viewDidLoad中使用,但在此不會更改色調顏色,但會更改圖像。 有人知道為什么嗎?

您可以使用以下方法重寫UIButton的方法。 只需在按鈕處於突出顯示狀態時更改其背景顏色即可。

- (void)setHighlighted:(BOOL)highlighted {
      [super setHighlighted:highlighted];

      if (highlighted) {
          self.backgroundColor = [UIColor redColor]; // whatever color you want
     }
}

我寫了一個UIButton的子類,該子類之前做了類似的事情:

@implementation OnTouchHighlightButton

- (void)awakeFromNib
{
    [super awakeFromNib];

    [self addActionSelectors];
}

- (void)addActionSelectors
{
    [self addTarget:self action:@selector(onTouchDown) forControlEvents:(UIControlEventTouchDown | UIControlEventTouchDragEnter)];
    [self addTarget:self action:@selector(onTouchUp) forControlEvents:(UIControlEventTouchUpInside | UIControlEventTouchUpOutside | UIControlEventTouchDragExit | UIControlEventTouchCancel)];
}

- (void)onTouchDown
{
    [UIView transitionWithView:self
                      duration:0.15
                       options:UIViewAnimationOptionTransitionCrossDissolve
                    animations:^{
                        self.highlighted = YES;
                    }
                    completion:nil];
}

- (void)onTouchUp
{
    [UIView transitionWithView:self
                      duration:0.15
                       options:UIViewAnimationOptionTransitionCrossDissolve
                    animations:^{
                        self.highlighted = NO;
                    }
                    completion:nil];
}

@end

您可以在onTouchUp和onTouchDown方法上添加所需的任何內容。 您還可以更改觸發這些方法的控制事件。

不幸的是,Apple沒有為UIButton上的tintColor和backgroundColor屬性提供forState: setter方法,因此您將不得不使用控件事件。 但是,您不必繼承UIButton。

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.button addTarget:self action:@selector(changeButtonToAppearHightlighted:) forControlEvents:UIControlEventTouchDown | UIControlEventTouchDragInside];
    [self.button addTarget:self action:@selector(changeButtonToAppearUnhightlighted:) forControlEvents:UIControlEventTouchDragOutside | UIControlEventTouchCancel | UIControlEventTouchUpOutside | UIControlEventTouchUpInside];
}

- (void)changeButtonToAppearHightlighted:(UIButton *)sender {
    if ([sender isEqual:self.button]) {
        sender.tintColor = BUTTON_TINTCOLOR_HIGHLIGHTED;
        sender.backgroundColor = BUTTON_BACKGROUNDCOLOR_HIGHLIGHTED;
    }
}

- (void)changeButtonToAppearUnhightlighted:(UIButton *)sender {
    if ([sender isEqual:self.button]) {
        sender.tintColor = BUTTON_TINTCOLOR_UNHIGHLIGHTED;
        sender.backgroundColor = BUTTON_BACKGROUNDCOLOR_UNHIGHLIGHTED;
    }
}

對不起,最后一次答復; 一些得到錯誤的信息。

在這里,我正在更新Swift 3.0中的答案; 希望它能按您的查詢運行良好;

@IBOutlet weak var colorChangeBtn: UIButton!


override func viewDidLoad() {
    super.viewDidLoad()
    colorChangeBtn.backgroundColor = UIColor.blue
    colorChangeBtn.tintColor = UIColor.cyan
    colorChangeBtn.setImage(#imageLiteral(resourceName: "select.png"), for: UIControlState.normal)
  }

@IBAction func colorChange(_ sender: UIButton) {
    sender.backgroundColor = UIColor.red
    sender.tintColor = UIColor.blue
    sender.setImage(#imageLiteral(resourceName: "focus.png"), for: .normal)
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM