NSTextField
サブクラスに問題があります。メッセージを入力するためのテキストフィールドです。また、サブテキストフィールドがファーストレスポンダーであり、ユーザーがホットキーCmd+を押したときに、アプリケーションはこのメッセージを送信する必要がありますEnter。RegisterEventHotKey()
多くのアプリケーションが同じアクションにこのホットキーを使用しているため、Carbonメソッドを使用できませんが、アプリケーションがそれをインターセプトします。私に何ができる?
質問する
1579 次
2 に答える
12
テキストフィールドデリゲートでは、コントロールに送信されるすべての「標準」コマンドに従うことができます。次に、コマンドを満たしたら、noop:
現在のキーの組み合わせをテストします。もしそうならCommand-Enter
、あなたのことをしてください。このようなものが機能するはずです:
@interface VCEAppDelegate : NSObject <NSApplicationDelegate, NSTextFieldDelegate>
@property (nonatomic, weak) IBOutlet NSTextField *textField;
@end
// .m
@implementation VCEAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
self.textField.delegate = self;
}
- (BOOL)isCommandEnterEvent:(NSEvent *)e {
NSUInteger flags = (e.modifierFlags & NSDeviceIndependentModifierFlagsMask);
BOOL isCommand = (flags & NSCommandKeyMask) == NSCommandKeyMask;
BOOL isEnter = (e.keyCode == 0x24); // VK_RETURN
return (isCommand && isEnter);
}
- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView
doCommandBySelector:(SEL)commandSelector {
if ((commandSelector == @selector(noop:)) &&
[self isCommandEnterEvent:[NSApp currentEvent]]) {
[self handleCommandEnter];
return YES;
}
return NO;
}
- (void)handleCommandEnter {
NSLog(@"Do something on Command-Enter");
}
@end
于 2012-07-27T07:55:53.740 に答える
1
NSApplicationをサブクラス化し、メソッドをオーバーライドしました
- (void) sendEvent:(NSEvent*) event {
if ([event type] == NSKeyDown) {
if (([event modifierFlags] & NSDeviceIndependentModifierFlagsMask) == NSCommandKeyMask) {
if ([event keyCode] == 36) {
if ([self.delegate respondsToSelector:@selector(sendMessage:)]) {
[self.delegate performSelector:@selector(sendMessage:) withObject:nil];
}
}
}
}
[super sendEvent:event];
}
info.plistで、このサブNSApplicationクラスはPrincipalクラスであると書きました。できます!
于 2012-07-27T08:23:09.960 に答える