UIButton作为开关

问题描述 投票:1回答:5

我正在尝试使用适用于iOS的Xcode4中的自定义图像创建类似推入式按钮。我使用的代码是

- (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没有区别。因此它不会做任何更改。

[我也曾尝试在»Touch Down«上触发IBAction,但您可以想象这会令人多么沮丧。

有人对此问题有解决方案吗?有人也为此感到挣扎吗?

问候,非常感谢朱利安

iphone ios xcode uibutton switch-statement
5个回答
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];
    }

当您按住按钮时,状态实际上是突出显示并选定的,因此突出显示和选定状态都需要一个图像。


3
投票

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


0
投票

同意Jim,您的代码需要进行如下修改...

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

0
投票

已创建两个按钮。

将按钮置于一个之上。

可以使用设计生成器中的“自定义按钮”设置默认图像和选定图像。

-(void)firstButtonClicked {

firstButton.hidden = YES;
secondButton.hidden = NO;

}

-(void)secondButtonClicked {

firstButton.hidden = NO;
secondButton.hidden = YES;

}

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)
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.