MacOS 自定义NSWindow,无法接收键盘输入
开发的时候遇见了这个神奇的问题。自定义了一个Window,内嵌WKWebview,但是webview里只能接收到鼠标点击事件,接收不到键盘输入的事件。
其实导致这个原因就是自定义window展示之后keywindow并没有切换成这个子window。如果你初始化的时候,styleMask设置没有设置NSWindowStyleMaskTitled,那就会导致becomeKeyWindow方法调用失效。
解决方案有两个,如果要保留系统自带的左上角的三个按钮(关闭,最大,最小按钮),初始化的时候带上NSWindowStyleMaskTitled就行了。即:
self = [super initWithContentRect:frame
styleMask: NSWindowStyleMaskTitled | NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskClosable | NSWindowStyleMaskUtilityWindow
backing:NSBackingStoreRetained
defer:NO];
如果不想要那三个按钮,NSWindowStyleMaskTitled舍弃,在自定义的window类中,添加下面这个方法,在展示这个window的时候再调用[self becomeKeyWindow]的方法。
- (BOOL)canBecomeKeyWindow {
return YES;
}
网友评论