UIButton作为开关

时间:2011-12-20 06:14:01

标签: iphone ios xcode uibutton switch-statement

我正在尝试使用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,但你可以想象它会有多么令人沮丧。

有没有人为这个问题找到解决方案? 是否还有人与那个人斗争?

迎接,非常感谢 儒略

5 个答案:

答案 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)
  }
}