我将NSView子类化,并在应用程序启动完成后启动全屏模式。该 View 在应用程序委托(delegate)中作为属性fooView
可用。
// AppDelegate.m
- (void)applicationDidFinishLaunching:(NSNotification*)notification {
[[self window] makeKeyAndOrderFront:self];
[[self fooView] enterFullScreenMode:[NSScreen mainScreen] withOptions:nil];
}
FooView
类本身实现以下功能。// FooView.m
- (void)keyDown:(NSEvent*)event {
NSLog(@"%@ %@ - %@", self.className, NSStringFromSelector(_cmd), event);
[self interpretKeyEvents:[NSArray arrayWithObject:event]];
}
- (void)cancelOperation:(id)sender {
NSLog(@"%@ %@ - %@", self.className, NSStringFromSelector(_cmd), sender);
[self exitFullScreenModeWithOptions:nil];
}
退出全屏模式后, View 不再接收键盘事件。为什么?
编辑:
似乎与我退出全屏模式有关。当我单击 View (而不是窗口)时,
keyDown:
和cancelOperation:
确实会在以下响应。 最佳答案
问题在于包含该 View 的窗口确实收到了任何键盘事件。离开全屏模式后,需要将窗口设为第一响应者。
- (void)cancelOperation:(id)sender {
NSLog(@"%@ %@ - %@", self.className, NSStringFromSelector(_cmd), sender);
[self exitFullScreenModeWithOptions:nil];
[self.window makeFirstResponder:self];
}
关于objective-c - 退出全屏模式后如何接收NSView的键盘事件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5961805/