按钮设置突出显示不起作用

时间:2013-07-25 14:13:34

标签: iphone ios objective-c

我有一个按钮,我想使用突出显示的属性突出显示。在界面构建器中,突出显示的属性起作用并将按钮更改为明显突出显示的状态。但是,在代码中,当我写     [myButton setHighlighted:YES]; 没有什么变化。关于为什么这不起作用的任何想法?

5 个答案:

答案 0 :(得分:4)

请记住正确的行为是下一个:按钮的突出显示状态仅在按下按钮时,因此将按钮更改为此状态并不完全正确。还有另一个适当的控制状态,selectedState

如果您修改该按钮的IBAction中的选定状态,它将起作用。在点击按钮时突破显示按钮的突出显示状态,这是错误的。

-(IBAction)touch:(UIButton *) tappedButton {
    [myButton setSelected:YES]
}

您只需要为selectedState提供资源。您可以通过xib(在属性检查器中为所选按钮选择按钮的状态,然后添加textColor背景等)或通过代码执行此操作:

 [self.button setImage:[UIImage imageNamed:image] forState:UIControlStateSelected];

答案 1 :(得分:1)

您可以通过在下一个runloop中执行[button setHighlighted:YES]来解决此问题:

- (void)highlightButton:(UIButton *)b { 
    [b setHighlighted:YES];
}

 - (IBAction)onTouchup:(UIButton *)sender {
    [self performSelector:@selector(highlightButton:) withObject:sender afterDelay:0.0];
}

如果它不起作用,您可以尝试这种替代方法:

-(void)onTouchup:(UIButton*) button
{
    [NSOperationQueue.mainQueue addOperationWithBlock:^{ button.highlighted = YES; }];
}

答案 2 :(得分:1)

当我需要保持按钮突出显示一段时间时,我自己遇到了这样的麻烦。

确保您添加到按钮的目标是IBAction类型。 Lemme在一个片段的帮助下向你展示:

@property (strong, nonatmoic) UIButton *myBtn;

IN .m文件,

self.myBtn = [[UIButton alloc]init];
self.myBtn = [UIButton buttonWithType : UIButtonTypeCustom];

[self.myBtn addTarget:self selector:@selector(btnPressed:) forControlEvents:UIControlEventTouchUpInside];

然后在声明目标方法时

-(IBAction)btnPressed: (id)sender
{
   UIButton *btnObj = (UIButton*).sender;
   [btnObj setHighlighted:true];
}

这样做,肯定会解决您的问题,因为按下的按钮将响应 IBAction 发件人 将有助于定义响应此方法的按钮。

答案 3 :(得分:0)

按钮在选中时会突出显示。请尝试拨打[button setSelected:YES];而不是[button setHighlighted:YES];这可以帮助您。

答案 4 :(得分:0)

UIButton有4个状态:正常,突出显示,选择和禁用。

- 如果启用了UIButton,当您触摸它时,突出显示将处于活动状态。并且在释放时它将变回正常状态。 还有命令[button setHighlighted:YES];只需在很短的时间内将其更改为突出显示状态并自动恢复为正常状态。这就是你无法突出显示按钮的原因。

- 要保留它,你必须使用@Vineet Singh答案的2种方法。但是你需要设置突出显示:NO以使其恢复正常状态。

您可以使用[button setSelected:YES / NO];控制但你需要setImageForState,或setTitleForState与Highlighted状态相同。