UIButton作为开关

我正在尝试在Xcode4中为iOS创build一个button式推送button。 我正在使用的代码是

- (IBAction)btnAll:(id)sender { UIButton *button = (UIButton *)sender; button.selected = !button.selected; } 

现在工作正常。 但是我的问题是,当我打开的时候,我把它按下,然后又popup来,然后终于打开。 该应用程序的作品,但这是非常丑陋的,但。

我首先将“高亮”图像设置为打开。 所以当我突出显示这个button时,它就会popup来。 这工作正常。 但是当我把它关掉的时候,问题是一样的,方向相反。

我试图把这个代码:

 - (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没有区别。 所以它不会做任何改变。

我也尝试触发“Touch Down”上的IBAction,但你可以想象这会是多么的令人沮丧。

有没有人得到解决这个问题? 有没有人与那个斗争呢?

打招呼,非常感谢Julian

之前我也遇到类似的问题,点击的时候button有点奇怪。 试试这个代码,让我知道如果它的作品

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

当您点击并按住button时,状态实际上是“高亮显示”和“选定”,因此您需要“高光”和“选定”状态的图像。

不要手动切换图像,只需在Interface Builder中设置选定状态的图像,并在点击button时切换selected属性。

同意吉姆,你的代码需要稍作修改如下…

 [button setImage[UIImage imageNamed@"off.png"] forState:UIControlStateNormal]; [button setImage[UIImage imageNamed@"on.png"] forState:UIControlStateSelected]; 

有两个button创build。

把button放在一个上面。

可以在devise构build器中使用“自定义button”选项设置默认和选定图像。

 -(void)firstButtonClicked { firstButton.hidden = YES; secondButton.hidden = NO; } -(void)secondButtonClicked { firstButton.hidden = NO; secondButton.hidden = YES; }