Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Cocoa WebView没有';无法响应键盘事件_Objective C_Macos_Cocoa_Webview_Webkit - Fatal编程技术网

Objective c Cocoa WebView没有';无法响应键盘事件

Objective c Cocoa WebView没有';无法响应键盘事件,objective-c,macos,cocoa,webview,webkit,Objective C,Macos,Cocoa,Webview,Webkit,我正在用纯Objective-C制作超级简单的单页浏览器,除了键盘事件,一切都很好。我就是不能用键盘在webforms中输入任何数据!鼠标操作,如粘贴到webforms和单击链接,都可以工作,但在webforms中键入则不行 代码: 我做错了什么?我已经阅读了文档并搜索了类似的问题,但我找不到解决方案。我试图捕获keyDown事件,但它没有发生。我试图设置我的窗口键和主窗口键,但似乎没有成功。它可能与谁有关:将可执行文件“abc”放在文件夹“abc.app/Contents/MacOS/”中,它

我正在用纯Objective-C制作超级简单的单页浏览器,除了键盘事件,一切都很好。我就是不能用键盘在webforms中输入任何数据!鼠标操作,如粘贴到webforms和单击链接,都可以工作,但在webforms中键入则不行

代码:


我做错了什么?我已经阅读了文档并搜索了类似的问题,但我找不到解决方案。我试图捕获keyDown事件,但它没有发生。我试图设置我的窗口键和主窗口键,但似乎没有成功。

它可能与谁有关:将可执行文件“abc”放在文件夹“abc.app/Contents/MacOS/”中,它最终会正常工作

编辑:我的同事发现,这一简单的测量方法会影响。使用此路径,应用程序的激活策略为0(NSApplicationActivationPolicyRegular)。如果没有此路径,应用程序的激活策略为2(NSApplicationActivationPolicy禁止)


带有某些名称的二进制文件应放在“.app”文件夹中,该文件夹还应包含“Contents”文件夹。这样,您的可执行文件就假装是macOS的捆绑应用程序。

您好,欢迎使用stackoverflow。为什么不应该使用简单的appkit XCode模板?仅仅实现一个webview可能会容易得多。是的,@Astoria,你当然是对的,但是对于这个小程序,我不想使用大的畸形XCode!老实说,我不喜欢这个IDE。@Astoria有趣的事实:在将代码插入XCode模板并删除发送“release”消息的行之后,该代码实际上可以正常工作。谢谢你的提示,我要再深入一点!我刚刚又看了一遍你的代码。您是否忘记调用
[super keyDown:event]
-method?@Astoria in(void)keyDown:(NSEvent*)事件?是的,但是这个回调函数并没有被操作系统调用。正如我在代码中所写的:“printf(“keydown”);//这个消息从未出现过。你能提供一些描述吗?@km gorbunov我的可执行文件在一些神奇的动作后开始像我预期的那样工作。我创建了几个目录(无论在文件系统中的哪个位置),模仿Xcode在构建应用程序时创建的目录,然后将可执行文件放在最下面的目录中。哇,键盘开始工作了!
#import <WebKit/WebKit.h>

@interface MyWebView : WebView
{
}
@end

@implementation MyWebView

-(void)windowWillClose:(NSNotification *)notification
{
    [NSApp terminate:self];
}

-(BOOL)becomeFirstResponder
{
    printf("becomeFirstResponder\n"); // this message always appears
    return YES;
}

-(void)keyDown:(NSEvent *)event
{
    printf("keydown\n"); // this message never appears
    // should I use this code to make keyboard work?
    [self interpretKeyEvents:[NSArray arrayWithObject:event]];
}

@end

int main(void) {
    NSRect contentRect;
    NSWindow *window = nil;
    WebView *webView = nil;
    NSString *urlForAuthentication = nil;

    NSApp = [NSApplication sharedApplication];

    contentRect = NSMakeRect(100, 100, 700, 700);
    window = [[NSWindow alloc] initWithContentRect:contentRect styleMask:NSTitledWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask backing:NSBackingStoreBuffered defer:NO];
    if (!window) {
        printf("!window\n");
        goto end;
    }
    webView = [[MyWebView alloc] initWithFrame:window.contentLayoutRect frameName:nil groupName:nil];
    if (!webView) {
        printf("!webView\n");
        goto end;
    }

    urlForAuthentication = [[NSString alloc] initWithCString:(const char *)"https://yahoo.com" encoding:NSUTF8StringEncoding];
    [[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlForAuthentication]]];
    window.contentView = webView;
    window.delegate = (id)webView;
    [window makeFirstResponder:webView];
    [window makeKeyAndOrderFront:nil];
    [window makeMainWindow];

    if (!window.keyWindow)
        printf("not keyWindow\n"); // this message always appears
    if (!window.mainWindow)
        printf("not mainWindow\n"); // this message always appears
    [NSApp run];

end:
    [urlForAuthentication release];
    [webView release];
    [window release];
    [NSApp release];
    return 0;
}
CC=clang

FRAMEWORKS:=/System/Library/Frameworks/WebKit.framework/WebKit /System/Library/Frameworks/AppKit.framework/AppKit
LIBRARIES:=
WARNINGS=-Wall -Werror

SOURCE=app.m

CFLAGS=-g -v $(WARNINGS) $(SOURCE)
LDFLAGS=$(LIBRARIES) $(FRAMEWORKS) $(LINK_WITH)
OUT=-o app

all:
    $(CC) $(CFLAGS) $(LDFLAGS) $(OUT)