2017-04-10 14 views
0

私は、単純な1ページブラウザを純粋なObjective-Cで作成しています。キーボードイベント以外はすべて問題ありません。私はちょうどキーボードを使ってwebformsに任意のデータを入力することはできません! Webフォームに貼り付けてリンクをクリックするなどのマウス操作は機能しますが、Webフォームを入力することはできません。Cocoa WebViewがキーボードイベントに応答しない

コード:

#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) 

私が間違ってやっていますか?私はドキュメントを読んで、同様の質問についてはSOを検索しましたが、解決策を見つけることができませんでした。私はkeyDownイベントをキャプチャしようとしましたが、それは起こりません。私は窓をキーとメインにしようとしましたが、一見不成功に終わりました。

+0

こんにちは。単純なappkit XCodeテンプレートを使用してはいけないのはなぜですか?単なるwebviewを実装するほうがはるかに簡単かもしれません。 – Astoria

+0

はい、@Astoriaはもちろんですが、この小さなプログラムの場合、私は大きなmonstous XCodeを使用しないことを好むでしょう!正直言って、私はこのIDEが嫌いです。 –

+0

@Astoria fun fact:このコードは実際にXCodeテンプレートに挿入し、 'リリース'メッセージを送信する行を削除した直後に起動します。ヒントありがとう、私は少し深くそれを掘るつもりだ! –

答えて

0

問題のある人は:実行可能ファイル 'abc'を 'abc.app/Content/MacOS /'フォルダに置き、最終的には正常に動作します!