2012-04-19 1 views
1

Я создал приложение для какао, в котором есть окно с текстовым полем, чтобы получить пользовательский ввод, маленькую кнопку значка клавиатуры, чтобы открыть программу просмотра клавиатуры. Когда пользователь нажимает кнопку «ОК» или «Отмена», чтобы закончить, я хочу скрыть программу просмотра клавиатуры. То, что я сделал это следующим образом:Toggle Keyboard Viewer на 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

«Клавиатурный просмотрщик», который вы показываете в MacOS, не предназначен для использования так же, как всплывающая клавиатура в iOS, и я уверен, что ее нельзя легко отбросить программным путем. Если никто другой не найдет лучшего решения, я бы немного исследовал, как его отклонить с помощью Apple Events или Apple Script. –

+0

Привет, Майкл, я просто не могу найти виртуальные клавиатуры с открытым кодом на Mac OS или любую документацию о том, как его реализовать. Я пробовал метод applescript (см. [This] (http://patjack.co.uk/toggle-keyboard-viewer-in-snow-leopard-10-6/)), используя класс NSAppleScript, но он не работает , Не могли бы вы выдать по-настоящему рабочий аппликатор? или некоторые предложения о том, как реализовать виртуальную клавиатуру в какао? Заранее большое спасибо! – 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 

Это использует Accessibility, так что вы должны иметь «Включить доступ для вспомогательных устройств» включен, для того, чтобы работать.

Обратите внимание, что это то же самое можно сделать в приложении Objective-C/C++ с использованием API Accessibility, который вы могли бы использовать, чтобы избежать необходимости обращаться к AppleScript в вашем приложении.

+0

Но процесс просмотра клавиатуры по-прежнему работает даже после закрытия окна программы просмотра клавиатуры. Вам нужно выйти из нее: * выйти приложение «KeyboardViewer» * – Binarian