2016-04-19 69 views
0

我的应用程序有输入的NSTextFields;我故意不使用NSNumberFormatter来做特殊的输入处理。该应用程序实现“全屏”模式。当应用程序处于全屏状态时,焦点位于文本字段中,然后按Esc键恢复窗口模式,而弹出拼写建议/完成项。当按下ESC键时,我不想要这些行为中的任何一种:完成弹出窗口,也不能退出全屏模式。有什么建议么?谢谢。NSTextField中的拼写建议

回答

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; 
} 
+0

谢谢您的回答,丹尼尔。我最终使用了你的第一个建议,在做了一些更多的研究以弄清楚如何判断应用程序处于全屏模式时,我能够实现我想要的行为。再次感谢你的帮助。 – wagill

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; 
} 
相关问题