我的应用有NSTextFields用于输入;我故意不使用NSNumberFormatter来进行输入的特殊处理。该应用程序实现"全屏"模式。当应用程序处于全屏状态,并且焦点位于文本字段中时,我按ESC键以恢复窗口模式,而我会弹出一个包含拼写建议/完成的弹出窗口。当按下ESC键时,我不想要这些行为中的任何一种:完成弹出窗口,也无法退出全屏模式。有什么建议?感谢。
答案 0 :(得分:1)
您需要设置NSTextFieldDelegate
来处理该命令,并在文本字段中设置委托。这是一个例子:
@property (weak) IBOutlet NSWindow *window;
@property (weak) IBOutlet NSTextField *textField;
@end
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
self.textField.delegate = self;
}
- (BOOL)control:(NSControl*)control textView:(NSTextView*)textView doCommandBySelector:(SEL)commandSelector {
if (commandSelector == @selector(cancelOperation:)) {
NSLog(@"handleCancel");
return YES;
}
return NO;
}
```
如果您只是想消除拼写建议,可以覆盖以下方法,但上述方法都可以。
- (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(NSInteger *)index {
return nil;
}
答案 1 :(得分:0)
这就是我实现我想要的行为的方式:
- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector {
if (commandSelector == @selector(cancelOperation:)) {
if (([_window styleMask] & NSFullScreenWindowMask) == NSFullScreenWindowMask) {
[textView doCommandBySelector:@selector(toggleFullScreen:)];
}
return YES;
}
return NO;
}