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