UIButton:设置图像select高亮状态
我设置button的状态正常,突出显示和select的图像,但是当button处于选定状态,我按下/突出显示它,我没有看到我突出显示的图像,但只是变灰的图片。 当selectbutton时,是否可以将图像设置为突出显示的状态?
我的代码:
[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]; 
并按下button,“pressed.png”图像不会select。
我find了解决办法:需要添加附加行
 [button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted]; 
你可以在Interface Builder中做到这一点。
 select您想要在IB设置的UIButton ,然后转到attributes inspector 。 
在屏幕截图中,我使用的是自定义buttontypes,但这并不重要。



我认为这里的大多数海报完全没有提到这一点。 我有同样的问题。 原来的问题是关于Selectedbutton(组合两种状态)的高亮状态,它不能在IB中设置,并回落到默认状态,并伴有一些变黑。 只有工作解决scheme作为一个职位提到
 [button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted]; 
Swift 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]) 
如果你有一个很好的理由这样做,这将是诀窍
添加这些目标:
 [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]; } 
在迅速,你可以做:
 button.setImage(UIImage(named: "selected"), forState: UIControlState.Selected.union(UIControlState.Highlighted)) 
在Swift 3.x中,当按下面的方式selectbutton时,可以设置突出显示的图像:
 // 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)) 
纠正我,如果我错了。 通过做
  [button setSelected:YES]; 
您正在清楚地改变所选button的状态。 所以自然由代码提供的图像将为你的情况checked.png选定的状态
如果有人想知道如何在Swift中工作,这是我的解决scheme:
 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) 
 我有问题设置imageView.highlighted = NO;  (设置YES正常工作,图像变为高亮显示)。 
 解决方法是调用[imageView setHighlighted:NO]; 
一切正常。
你想从哪里打电话
 [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; } } 
上面提到豪尔赫,但我改进了一点,给出了完整的工作解决scheme