按下时突出显示的UIButton在第一次按下时不会突出显示

时间:2014-05-16 05:31:46

标签: ios objective-c uibutton

我按下时突然显示一个按钮,我想出了这个......

//The button #1
-(IBAction)Number1:(UIButton *)sender{
    [self buttonPressed:sender];
    [self appendDigit:@"1"];
}

//The function for buttonPressed
- (void) buttonPressed:(UIButton *)sender {

    [sender setBackgroundImage:[UIImage imageNamed:@"ButtonPressed.png"] forState:(UIControlStateHighlighted)];
}

它按照我想要的方式突出显示按钮,但仅在第二次按下之后。不知道为什么这样做,但它是..所以,我想知道我在这里缺少什么?

我已经看到其他帖子以不同的方式处理这个问题,但我喜欢我实现计算器的方式有点不同......

嗯,我希望你们能够在正确的方向上伸出援手或指导......先谢谢你们。

2 个答案:

答案 0 :(得分:2)

原因是这行代码

[sender setBackgroundImage:[UIImage imageNamed:@"ButtonPressed.png"] forState:(UIControlStateHighlighted)];

在第一次点击时尚未处理。

您必须制作该按钮的IBOutlet,如

@property (weak, nonatomic) IBOutlet UIButton *button;

然后在 viewDidLoad

    [self.button setBackgroundImage:[UIImage imageNamed:@"ButtonPressed.png"] forState:(UIControlStateHighlighted)];

Github中的示例项目: https://github.com/voyage11/HighLightBtn

答案 1 :(得分:1)

在单击按钮一次后,您只需设置背景图像。相反,移动你的"按下"代码到viewDidLoad或viewWillAppear。换句话说,这段代码:

    [button setBackgroundImage:[UIImage imageNamed:@"ButtonPressed.png"] forState:(UIControlStateHighlighted)];

此处button应引用您的按钮,就像在IBOutlet中一样。

这就是为什么:这个行代码并不意味着"将此背景设置为ButtonPressed.png。"相反,它意味着:"当此按钮的状态更改为突出显示时,背景应为ButtonPressed.png。"因此,您只需一次(不是每次按下按钮)都会运行此行,而按下按钮之前