我按下时突然显示一个按钮,我想出了这个......
//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)];
}
它按照我想要的方式突出显示按钮,但仅在第二次按下之后。不知道为什么这样做,但它是..所以,我想知道我在这里缺少什么?
我已经看到其他帖子以不同的方式处理这个问题,但我喜欢我实现计算器的方式有点不同......
嗯,我希望你们能够在正确的方向上伸出援手或指导......先谢谢你们。
答案 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。"因此,您只需一次(不是每次按下按钮)都会运行此行,而按下按钮之前
。