我有一个UIButton,当被选中时,触摸时不应改变状态。 默认行为是在触摸时处于UIControlStateHighlighted状态,这让我很生气。
有什么建议吗?
我有一个UIButton,当被选中时,触摸时不应改变状态。 默认行为是在触摸时处于UIControlStateHighlighted状态,这让我很生气。
有什么建议吗?
你的按钮必须将buttonType
设置为Custom(自定义)。
在IB中,你可以取消勾选"Highlight adjusts image"(高亮调整图像)。
通过编程,你可以使用theButton.adjustsImageWhenHighlighted = NO;
进行设置。
"disabled"状态也有类似的选项可用。
除了在 IB 中取消“高亮调整图像”的选项之外,还要确保按钮类型设置为 CUSTOM。
这将适用于您:
[button setBackgroundImage:[UIImage imageNamed:@"button_image"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected | UIControlStateHighlighted];
这里的关键是第三行...
对于设置图像/背景图像也是同样适用的。
UIButton
的adjustsImageWhenHighlighted
属性似乎只影响背景图像。 - Michael ThieladjustsImageWhenHighlighted = NO;
button.adjustsImageWhenDisabled = NO;
同样适用于使自己的禁用按钮外观。
根据按钮从默认状态到高亮状态的变化,您可以调用一些方法将其设置为所需状态。因此,如果图像发生变化,您可以执行以下操作:
[myButton setImage:[myButton imageForState:UIControlStateNormal] forState:UIControlStateHighlighted];
[myButton setTitle:[myButton titleForState:UIControlStateNormal] forState:UIControlStateHighlighted];
其他类似的函数:
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state
- (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)state
针对Swifty开发者 -
yourButton.adjustsImageWhenHighlighted = false
Swift 3+
button.adjustsImageWhenHighlighted = false
button.adjustsImageWhenDisabled = false
将您的按钮类型设置为“Custom”,取消选中高亮调整图像,就完成了。
如果这个方法适用于你的话,我这里有一个简单的解决方案。在为TouchUpInside或TouchDown编写的IBAction方法的第一行中,将highlighted设置为NO。对我来说,在TouchUpInside上效果很好。
-(IBAction)selfDismiss:(id)sender {
self.btnImage.highlighted = NO;
NSLog(@"selfDismiss");
etc, etc, etc.
}