首页 文章

UIButton:为选定突出显示的状态设置图像

提问于
浏览
150

我为按钮的状态Normal,Highlighted和Selected设置了一个图像,但是当按钮处于选中状态时我按下/突出显示它我没有看到我突出显示的图像而只是灰色的图像 . 选择按钮时,是否可以将图像设置为高亮显示状态?

我的代码:

[button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected];

当我做:

[button setSelected:YES];

并按下按钮,“pressed.png”图像不会选择 .

13 回答

  • 0

    我找到了解决方案:需要添加添加行

    [button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
    
  • 113

    您可以在Interface Builder中执行此操作 .

    选择要在 IB 中设置的 UIButton ,然后转到 attributes inspector .

    在屏幕截图中,我使用的是自定义按钮类型,但这确实很重要 .

    Custom Default

    enter image description here

    enter image description here

  • 0

    我想这里的大多数海报完全忽略了这一点 . 我有同样的问题 . 最初的问题是关于选中按钮(组合两个状态)的突出显示状态,它无法在IB中设置并且在一些变暗的情况下回落到默认状态 . 只提到工作解决方案作为一个帖子:

    [button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
    
  • 27

    斯威夫特3

    // Default state (previously `.Normal`)
    button.setImage(UIImage(named: "image1"), for: [])
    
    // Highlighted
    button.setImage(UIImage(named: "image2"), for: .highlighted)
    
    // Selected
    button.setImage(UIImage(named: "image3"), for: .selected)
    
    // Selected + Highlighted
    button.setImage(UIImage(named: "image4"), for: [.selected, .highlighted])
    

    要设置背景图片,我们可以使用 setBackgroundImage(_:for:)

    Swift 2.x

    // Normal
    button.setImage(UIImage(named: "image1"), forState: .Normal)
    
    // Highlighted
    button.setImage(UIImage(named: "image2"), forState: .Highlighted)
    
    // Selected
    button.setImage(UIImage(named: "image3"), forState: .Selected)
    
    // Selected + Highlighted
    button.setImage(UIImage(named: "image4"), forState: [.Selected, .Highlighted])
    
  • 1

    如果你有充分的理由这样做,这将成功

    添加这些目标:

    [button addTarget:self action:@selector(buttonTouchDown:) forControlEvents:UIControlEventTouchDown];
    [button addTarget:self action:@selector(buttonTouchUp:) forControlEvents:UIControlEventTouchUpInside];
    
    
    -(void)buttonTouchDown:(id)sender{
        UIButton *button=(UIButton *)sender;
        if(button.selected){
            [button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateNormal];
        }
    }
    
    -(void)buttonTouchUp:(id)sender{
        UIButton *button=(UIButton *)sender;
        [button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
    }
    
  • 7

    在Swift 3.x中,您可以按以下方式选择按钮时设置高亮显示的图像:

    // Normal state
    button.setImage(UIImage(named: "normalImage"), for: .normal) 
    
    // Highlighted state (before button is selected)
    button.setImage(UIImage(named: "pressedImage"), for: .highlighted)
    
    // Selected state
    button.setImage(UIImage(named: "selectedImage"), for:  .selected)
    
    // Highlighted state (after button is selected)
    button.setImage(UIImage(named: "pressedAfterBeingSelectedImage"), 
                    for:  UIControlState.selected.union(.highlighted))
    
  • 5

    在swift中你可以这样做:

    button.setImage(UIImage(named: "selected"), 
                    forState: UIControlState.selected.union(.highlighted))
    
  • 0

    如果我错了,请纠正我 . 通过做

    [button setSelected:YES];
    

    您正在明确更改所选按钮的状态 . 因此,您提供的代码自然会在您的case checked.png中为所选状态提供图像

  • 11

    如果有人想知道这在Swift中是如何工作的,这是我的解决方案:

    button.setImage("normal.png", forState: .Normal)
    button.setImage("highlighted.png", forState: .Highlighted)
    button.setImage("selected.png", forState: .Selected)
    
    var selectedHighLightedStates: UIControlState = UIControlState.Highlighted
    selectedHighLightedStates = selectedHighLightedStates.union(UIControlState.Selected)
    button.setImage("selectedHighlighted.png", forState: selectedHighLightedStates)
    
  • 226

    我有问题设置 imageView.highlighted = NO; (设置 YES 工作正常,图像更改为突出显示的图像) .

    解决方案是调用 [imageView setHighlighted:NO];

    一切正常 .

  • 27

    你想打电话的地方

    [button addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];
    

    方法:

    -(void)test:(id)sender{
        UIButton *button=(UIButton *)sender;
        if (_togon){
          [button setTitleColor:UIColorFromRGB(89,89, 89) forState:UIControlStateNormal];
          _togon=NO;
        }
        else{
          [button setTitleColor:UIColorFromRGB(28, 154, 214) forState:UIControlStateNormal];
          _togon=YES;
        }
    }
    

    归功于Jorge,但我改进了一些,给出了完整的工作解决方案

  • 0

    斯威夫特3

    button.setImage(UIImage(named: "selected_image"), for: [.selected, .highlighted])
    

    OR

    button.setImage(UIImage(named: "selected_image"), for: UIControlState.selected.union(.highlighted))
    

    这意味着按钮当前处于 selected 状态,然后触摸它,显示 highlight 状态 .

  • 2

    Xamarin C#

    按位进行OR由于某种原因不起作用

    button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
    button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected | UIControlState.Highlighted | UIControlState.Focused);
    

    以下作品

    button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
    button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected);
    button.SetImage(new UIImage("ImagePressed"), UIControlState.Highlighted);
    button.SetImage(new UIImage("ImagePressed"), UIControlState.Focused);
    

相关问题