我正在尝试使用Xcode4 for iOS中的自定义图像创建一个类似按下推按钮的按钮。 我正在使用的代码是
- (IBAction)btnAll:(id)sender
{
UIButton *button = (UIButton *)sender;
button.selected = !button.selected;
}
现在工作正常。 但我的问题是,当我打开时,我按下它,然后再次弹出,然后最后打开。 该应用程序可以工作,但这确实很难看。
我首先将“突出显示”图像设置为开启。因此,当我突出显示按钮时,它会亮起并弹出。这很好。但是当我再次关闭时,问题是相反的,反之亦然。
我试着把那段代码:
- (IBAction)btnAll:(id)sender
{
UIButton *button = (UIButton *)sender;
if(button.selected)
{
[button setImage[UIImage imageNamed@"off.png"] forState:UIControlStateHighlighted];
}
else
{
[button setImage[UIImage imageNamed@"on.png"] forState:UIControlStateHighlighted];
}
button.selected = !button.selected;
}
但是button.selected = !button.selected
很长时间没有区别。
所以它不会做任何改变。
我也尝试在“触摸下来”中触发IBAction,但你可以想象它会有多么令人沮丧。
有没有人为这个问题找到解决方案? 是否还有人与那个人斗争?
迎接,非常感谢 儒略
答案 0 :(得分:3)
不要手动切换图像,只需在Interface Builder中设置所选状态的图像,并在点击按钮时交换selected
属性。
答案 1 :(得分:2)
之前我遇到过类似的问题,点击时按钮的工作有点奇怪。试试这段代码,让我知道它是否有效
UIButton *button = (UIButton *)sender;
if(button.selected)
{
[button setImage:[UIImage imageNamed:@"off.png"] forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"off.png"] forState:UIControlStateSelected];
[button setImage:[UIImage imageNamed:@"off.png"] forState:UIControlStateHighlighted | UIControlStateSelected];
}
else
{
[button setImage:[UIImage imageNamed:@"on.png"] forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"on.png"] forState:UIControlStateSelected];
[button setImage:[UIImage imageNamed:@"on.png"] forState:UIControlStateHighlighted | UIControlStateSelected];
}
button.selected = !button.selected;
If (button.selected) {
[button setImage:[UIImage imageNamed:@"on.png"] forState:UIControlStateNormal];
} else {
[button setImage:[UIImage imageNamed:@"off.png"] forState:UIControlStateNormal];
}
点击并按住某个按钮时,状态实际上是突出显示的&选择此选项,您需要高光和选定状态的图像。
答案 2 :(得分:0)
同意Jim的意见,您的代码需要进行少量修改,如下所示......
[button setImage[UIImage imageNamed@"off.png"] forState:UIControlStateNormal];
[button setImage[UIImage imageNamed@"on.png"] forState:UIControlStateSelected];
答案 3 :(得分:0)
创建了两个按钮。
将按钮放在一个上面。
可以设置默认&使用设计构建器中的“自定义按钮”选项选择的图像。
-(void)firstButtonClicked {
firstButton.hidden = YES;
secondButton.hidden = NO;
}
-(void)secondButtonClicked {
firstButton.hidden = NO;
secondButton.hidden = YES;
}
答案 4 :(得分:0)
@Jim-您何时切换isSelected状态?每次按下isHighlighted都会被调用两次。我被黑的UIButton开关版本如下:-
class ButtonSwitch: UIButton {
override func sendAction(_ action: Selector, to target: Any?, for event: UIEvent?) {
if allControlEvents == .touchUpInside {
isSelected.toggle()
}
super.sendAction(action, to: target, for: event)
}
}