我创建了一个可可应用程序,它有一个带有文本字段的窗口以获取用户输入,一个小键盘图标按钮用于调出键盘查看器。当用户单击“确定”或“取消”按钮完成时,我想隐藏键盘查看器。我所做的如下:
//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始终无法隐藏它。
答案 0 :(得分: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。