所以我在我的Cocoa / Mac应用程序中启用全屏模式,显然默认行为是你可以点击退出键退出全屏模式。我添加了一些NSTextViews(在NSScrollViews中),现在他们正在拦截转义键,我无法退出全屏。
对我来说,仍然允许转义键退出全屏并且不被我的NSTextViews拦截的最佳方法是什么?
谢谢!
答案 0 :(得分:0)
Escape的默认键绑定是-cancelOperation:
。在回应之后,NSTextView
然后转身并发送自己-complete:
来完成文本。
这是你按Escape时所看到的吗?文本视图是否可以完成您键入的任何文本?
要尝试的第一件事是通过在文本视图的委托中实施-textView:completions:forPartialWordRange:indexOfSelectedItem:
并返回nil
来禁用完成。
如果这不起作用,请实施-textView:doCommandBySelector:
并将选择器与@selector(cancelOperation:)
进行比较。如果不相等,请返回NO
以允许正常处理。如果是,请尝试使用[[theTextView nextResponder] doCommandBySelector:theSelector]
将其传递给响应者链。然后从委托方法返回YES
以防止文本视图尝试处理它。
如果仍然不起作用,请通过测试[NSApp presentationOptions]
是否包含NSApplicationPresentationFullScreen
来检查应用是否处于全屏模式,而不是将其传递给响应者链。如果是,请通过设置一组正常的演示选项使其退出全屏模式。或者,您可以测试主窗口以查看其样式掩码是否包含NSFullScreenWindowMask
,如果是,则在其上调用-toggleFullScreen:
。同样,您将从委托方法返回YES
以防止进一步处理。
答案 1 :(得分:0)
根据Ken的建议,这就是我最终要做的工作:
- (BOOL)textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector {
if (commandSelector == @selector(cancelOperation:)) {
if([self inFullScreenMode]) {
[self.window toggleFullScreen:nil];
}
}
else {
return NO;
}
return YES;
}
- (BOOL) inFullScreenMode {
NSApplicationPresentationOptions opts = [[NSApplication sharedApplication ] presentationOptions];
if ( opts & NSApplicationPresentationFullScreen) {
return YES;
}
return NO;
}