Cocoa webview文本字段不接受击键

时间:2012-11-01 02:31:52

标签: macos cocoa webview textfield keystrokes

我是OSx开发的新手。

我有一个使用Webview的Cocoa应用程序。除了webview中的文本字段外,一切正常。我知道如何在NSTextField中启用击键,而不是在Webview中启用击键。我整天都在网上搜索,但没有运气。 我非常需要一些关于如何启用击键来实现键盘快捷键的帮助。

示例:

复制 - >命令+ c

粘贴 - >命令+ v

cut - >命令+ x

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我现在得到了答案。我意识到我忘了实施

- (BOOL)performKeyEquivalent:(NSEvent *)theEvent

到处理Webview的类。

答案 1 :(得分:0)

@Kimpoy,感谢您对performKeyEquivalent的引用! 为了完整起见,我用这种方式实现了......

从WebView对您的webview进行子类化并实现该方法:

- (BOOL)performKeyEquivalent:(NSEvent *)theEvent {

    NSString * chars = [theEvent characters];
    BOOL status = NO;

    if ([theEvent modifierFlags] & NSCommandKeyMask){

        if ([chars isEqualTo:@"a"]){
            [self selectAll:nil];
            status = YES;
        }

        if ([chars isEqualTo:@"c"]){
            [self copy:nil];
            status = YES;
        }

        if ([chars isEqualTo:@"v"]){
            [self paste:nil];
            status = YES;
        }

        if ([chars isEqualTo:@"x"]){
            [self cut:nil];
            status = YES;
        }
    }

    if (status)
        return YES;

    return [super performKeyEquivalent:theEvent];
}

在这里感谢@aventurella:https://github.com/Beats-Music/mac-miniplayer/issues/3。只需略微修改以将超级响应作为默认值返回,因为它应向下传播到其子视图。

作为备注,我建议您在自定义网页浏览中实施日志或类似内容,以确保您真正与您的班级合作:

- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];

    // Drawing code here.

    NSLog(@"Custom webview running...");
}