Objective c 允许escape像在Cocoa中一样退出全屏

Objective c 允许escape像在Cocoa中一样退出全屏,objective-c,macos,cocoa,Objective C,Macos,Cocoa,因此,我在Cocoa/Mac应用程序中启用全屏模式,默认行为显然是,您可以按escape键退出全屏模式。我在NSScrollView中添加了一些NSTextView,现在它们正在拦截escape键,我无法退出全屏 对于我来说,让退出键退出全屏并且不被NSTextViews截获的最佳方式是什么 谢谢 转义的默认键绑定是to-cancelOperation:。作为响应,NSTextView然后转过身,发送自己-complete:to do text completion 这就是你按Escape时看到

因此,我在Cocoa/Mac应用程序中启用全屏模式,默认行为显然是,您可以按escape键退出全屏模式。我在NSScrollView中添加了一些NSTextView,现在它们正在拦截escape键,我无法退出全屏

对于我来说,让退出键退出全屏并且不被NSTextViews截获的最佳方式是什么


谢谢

转义的默认键绑定是to-cancelOperation:。作为响应,NSTextView然后转过身,发送自己-complete:to do text completion

这就是你按Escape时看到的吗?文本视图是否提供完成您键入的任何文本的功能

首先要尝试的是通过在文本视图的委托中实现-textView:completions:forPartialWordRange:indexOfSelectedItem:并返回nil来禁用完成

如果这不起作用,请实现-textView:doCommandBySelector:,并将选择器与@selectorcancelOperation:进行比较。如果不相等,则返回NO以允许正常处理。如果是,请尝试使用[[theTextView nextResponder]doCommandBySelector:theSelector]将其传递给响应程序链。然后从委托方法返回YES,以防止文本视图尝试处理它


如果仍然不起作用,不要将其传递给响应者链,而是通过测试[NSApp presentationOptions]是否包含NSApplication PresentationFullScreen来检查应用程序是否处于全屏模式。如果是,通过设置一组正常的演示选项,使其脱离全屏模式。或者,您可以测试主窗口,查看其样式掩码是否包含NSFullScreenWindowMask,如果包含,则在其上调用-toggleFullScreen:。同样,您应该从委托方法返回YES,以防止进一步处理。

根据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;
}