I made a little cocoa app that brings up an IKPictureTaker and saves a picture to a file if you press the set button. Currently, if you press esc or Command . the window picture taker will close. Is there a way to disable this behavior?
+1
A:
You need to insert yourself somewhere in the responder chain in time to catch the escape key down event, and disable it. You may have to subclass IKPictureTaker
. The snippet below should help you (source).
- (void)keyDown:(NSEvent *)event {
if ([event keyCode] == 53) {
NSLog(@"Escape has been pressed");
}
}
Johan Kool
2009-11-26 02:52:16
A:
If you want/need to drop down to the low level, see the CGEvent API. Using it, you'd create a tap and swallow/modify specific events.
Justin
2009-12-08 09:38:30
+1
A:
Another approach is to hide the close and Cancel buttons, so they can't be pressed:
IKPictureTaker *taker = [IKPictureTaker pictureTaker]; [taker setStyleMask:0]; //disable close button for(NSView *aView in [[taker contentView] subviews]){ if([aView isKindOfClass:[NSButton class]]){ NSButton *aButton = (NSButton*)aView; if([aButton action] == @selector(cancelButton:)) [aButton setHidden:YES]; } }
Vincent Gable
2009-12-08 10:35:06
The close button is disabled in my app, what I am asking about is how to prevent it from being close when someone pressed the esc key or command .
Mike2012
2009-12-08 18:28:43
It's the cancel or close buttons that are acting on the esc/cmd-. So disabling them gives you the behavior you want.But if you want the button visible, but without that key equivalent, then instead of doing [aButton setHidden:YES] do, [aButton setKeyEquivalent:@""]
Vincent Gable
2009-12-08 20:26:25