2012-04-19 24 views
1

私は、ユーザ入力を得るためのテキストフィールドを持つウィンドウと、キーボードビューアを表示するための小さなキーボードアイコンボタンを備えたココアアプリを作成しました。ユーザーが[OK]または[キャンセル]ボタンをクリックして終了すると、キーボードビューアを非表示にします。次のように私がやったことです:キーボードビューアをMac OS Xでプログラミングする

//action for keyboard-icon button 
-(IBAction)input:(id)sender 
{ 
    [self toggleKeyboard:YES]; 
} 

//action for Cancel button 
-(IBAction)cancel:(id)sender 
{ 
    [self toggleKeyboard:NO]; 
    [NSApp abortModal]; 
    [[self window] orderOut: self]; 
} 

//action for OK button 
-(IBAction)ok:(id)sender 
{ 
    [self toggleKeyboard:NO]; 
    [NSApp stopModal]; 
    [[self window] orderOut: self]; 
} 


-(void)toggleKeyboard:(BOOL)show 
{ 
    NSDictionary *property = [NSDictionary dictionaryWithObject:(NSString*)kTISTypeKeyboardViewer 
                forKey:(NSString*)kTISPropertyInputSourceType]; 
    NSArray *sources = (NSArray*)TISCreateInputSourceList((CFDictionaryRef)property, false); 

    TISInputSourceRef keyboardViewer = (TISInputSourceRef)[sources objectAtIndex:0]; 
    if (show == YES) 
    { 
     TISSelectInputSource(keyboardViewer); 
    } 
    else 
    { 
     TISDeselectInputSource(keyboardViewer); 
    } 

    CFRelease((CFTypeRef)sources); 

} 

私が正常にキーボードビューアを起動することができますが、それはすべての回でTISDeselectInputSourceで非表示にすることができません。助けてください!!!

+1

Mac OSで表示されている「キーボードビューア」は、iOSのポップアップキーボードと同じ方法で使用することは意図されていません。プログラムから簡単に取り除くことはできません。誰ももっと良い解決策が出てこない人は、Apple EventsやApple Scriptを使って解雇する方法を少し調べるかもしれません。 –

+0

こんにちはマイケル、私はちょうどMac OS上でオープンソースの仮想キーボードやそれを実装する方法についてのドキュメントを見つけることができません。私はNSAppleScriptクラスを使用して、applescriptメソッド([this](http://patjack.co.uk/toggle-keyboard-viewer-in-snow-leopard-10-6/)を参照してください)を試しましたが、動作しません。本当にうまく動作しているアプリスクリプトをここにあげてもらえますか?またはココアで仮想キーボードを実装する方法に関するいくつかの提案?ありがとうございます! – leochou0729

+0

@ leochou0729:仮想キーボードを表示しようとする特別な理由はありますか? –

答えて

0

キーボードビューアをプログラムで非表示にすることは可能です。ちょっと前に私のメディアセンターでAppleScriptを作って、それを切り替えます。私はそれを示すビットを含めるつもりはありません。あなたがすでにそれを理解したためですが、主に私がやったやり方は実行可能ファイルを呼び出すことでした。

はとにかく、ここのAppleScriptだ:

tell application "System Events" 
    if exists (process "Keyboard Viewer") then 
     click (process "Keyboard Viewer"'s window 1's buttons whose subrole is "AXCloseButton") 
    end if 
end tell 

これは、アクセシビリティを使用していますので、あなたは、「補助装置にアクセスを有効にする」持っている必要があり、それが動作するためにオン。

Objective-C/C++アプリケーションでAccessibility APIを使用すると、アプリケーションでAppleScriptを呼び出す必要がなくなります。

+0

キーボードビューアのプロセスは、キーボードビューアのウィンドウを閉じた後もまだ実行されています。アプリケーション "KeyboardViewer" * – Binarian