保持iPhone UIButton突出显示

pio*_*ion 23 iphone uibutton

我有以下代码片段:

@interface Foo: UIViewController {
  ...
  UIButton *myButton;
  ...
}
Run Code Online (Sandbox Code Playgroud)

@implementation Foo

- (void) viewDidLoad {
  ...
  myButton.highlighted = YES;
  ...
}
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,该按钮以蓝色突出显示(默认行为).它按我的预期工作.

但按下按钮一次后,该按钮不再突出显示.

然后,我创建了一个IBAction highlightButton处理Touch Up Inside我明确调用的事件myButton.highlighted = Yes;.不幸的是,按钮突出显示仍然不会停留.

如果按下后如何将其突出显示为蓝色?

Wer*_*her 45

解决方案是[button setHighlighted:YES]在下一个runloop中执行:

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

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

  • 问题是iOS框架调用onTouchup(事件处理程序),然后取消按下按钮(setHighlighted:NO).因此,在事件处理程序中调用setHighlighted没有任何效果. (2认同)

mis*_*may 13

最简单的代码就在这里.

dispatch_async(dispatch_get_main_queue(), ^{
    [button setHighlighted:YES];
});
Run Code Online (Sandbox Code Playgroud)


Pet*_*ese 7

另一种运行方法是将块发送到主操作队列:

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

  • 哇哇 如果没有StackOverflow,我怎么能发现这个? (3认同)