1

ユーザー入力を取得するためのテキスト フィールドを含むウィンドウと、キーボード ビューアーを表示するための小さなキーボード アイコン ボタンを備えたココア アプリを作成しました。ユーザーが [OK] または [キャンセル] ボタンをクリックして終了したときに、キーボード ビューアーを非表示にしたい。私がやったことは次のとおりです。

//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 で非表示にすることはできません。

4

1 に答える 1