2

我是 OSx 开发的新手。

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

例子:

复制 -> 命令 + c

粘贴 -> 命令 + v

剪切->命令+ x

任何帮助将不胜感激。

4

2 回答 2

1

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

- (BOOL)performKeyEquivalent:(NSEvent *)theEvent

到处理 Webview 的类。

于 2012-11-01T07:10:56.163 回答
1

@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 。只需稍作修改以将超级响应作为默认值返回,因为它应该向下传播到其子视图。

作为说明,我建议在您的自定义 webview 中实现日志或类似内容,以确保您确实在使用您的课程:

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

    // Drawing code here.

    NSLog(@"Custom webview running...");
}
于 2015-11-11T10:51:47.923 回答