2012-04-19 34 views
1

我創建了一個可視化應用程序,該應用程序具有帶文本字段的窗口以獲取用戶輸入,這是一個小鍵盤圖標按鈕,用於顯示鍵盤查看器。當用戶點擊確定或取消按鈕完成時,我想隱藏鍵盤查看器。我所做的就是如下:編程地在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解僱它。 – 2012-04-19 09:09:12

+0

嗨邁克爾,我只是無法找到Mac OS上的開源虛擬鍵盤或任何關於如何實現它的文檔。我嘗試過使用NSAppleScript類的applescript方法(參考[this](http://patjack.co.uk/toggle-keyboard-viewer-in-snow-leopard-10-6/)),但它不起作用。你可以在這裏發表一個真正有用的applescript嗎?或者關於如何在可可中實現虛擬鍵盤的一些建議?提前感謝! – leochou0729 2012-04-19 09:58:17

+0

@ leochou0729:你是否有特別的理由想要展示虛擬鍵盤? – 2012-04-20 20:34:19

回答

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 API的Objective-C/C++應用程序中完成,您可以使用它來避免在應用程序中調用AppleScript。

+0

但是,即使在關閉鍵盤查看器的窗口後,鍵盤查看器的過程仍在運行,您需要退出:*退出應用程序「KeyboardViewer」* – Binarian 2013-11-07 16:25:20