我将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/

10-11 07:27