Нужно использовать метод setHighlighted:, но не напрямую, а сразу после того как NSButton закончит выполнение собственного обработчика события нажатия на кнопку.
- (IBAction)buttonClick:(id)sender { [self performSelector:@selector(highlight:) withObject:(NSButton *)sender afterDelay:0.01]; } - (void)highlight:(NSButton *)aButton { [aButton.cell setHighlighted:YES]; }
Демонстрация:
Но тут может быть такой эффект, что если нажать на кнопку и не отпуская левую клавишу мыши отвести курсор мыши в сторону, то подсветка с кнопки снимается и она принимает обычный вид. Частично это можно исправить, если перекрыть метод mouseDown: в подклассе NSButton:
- (void)mouseDown:(NSEvent *)anEvent { // NSLog(@"mouse down!"); [super mouseDown:anEvent]; // NSLog(@"mouse up!"); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.01 * NSEC_PER_SEC) , dispatch_get_main_queue(), ^{ [self.cell setHighlighted:YES]; }); }
См. также: