cocoa - 显示系统键盘 Mac 应用程序?

标签 cocoa macos

如果在我的应用程序中选择了任何文本输入字段,我需要显示系统键盘。我似乎找不到任何有关如何执行此操作的资源。有什么建议吗?

编辑:我问这个问题是因为我正在制作一个全屏应用程序,需要根据用户选择显示/隐藏。

谢谢,
泰贾

最佳答案

您找不到该信息的原因是它是一个 C API,并且不在 Cocoa 中。您需要使用的API是Text Input Sources Services 。试试这个示例:

#import <Foundation/Foundation.h>
#import <Carbon/Carbon.h>

int main(){
    NSAutoreleasePool*pool=[[NSAutoreleasePool alloc] init];
    NSDictionary*property=[NSDictionary dictionaryWithObject:(NSString*)kTISTypeKeyboardViewer
                                                      forKey:(NSString*)kTISPropertyInputSourceType];
    NSArray*tisArray=(NSArray*)TISCreateInputSourceList((CFDictionaryRef)property,NO);
    // tisArray usually only contains just one keyboard viewer
    // in a rare case the user might have another viewer installed, beware
    TISInputSourceRef keyboardViewer=(TISInputSourceRef)[tisArray objectAtIndex:0];
    TISSelectInputSource(keyboardViewer);
    CFRelease((CFTypeRef)tisArray);
    [pool drain];
    return 0;
}

它是一个 Core Foundation 类型的 API,所以如果你了解 Cocoa,用法是类似的; Core Foundation 基本上是 NSObject 的 C API。大多数情况下,您可以使用免费桥接,请参阅 this SO question 。在垃圾收集环境中保留/释放它们时需要小心。 TIS在10.5中引入;我不知道为什么Apple当时没有将其作为Cocoa API引入。 显然他们当时还没有下定决心处置 64 位 Carbon。

关于cocoa - 显示系统键盘 Mac 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3860256/

相关文章:

macos - NSTask 崩溃

swift - 如何写入 NSPasteboard 并使用相同的指针获取它

swift - NSTable中对象的列向数据

macos - Mac OS 更改文件夹的创建日期和上次修改日期

iphone - 设置方法所需静态对象的正确方法

标题栏中的 cocoa 图标

cocoa - NSURLConnection 只下载前 567 个字节?

ios - 我的撇号变成了,Äô

objective-c - 自定义 NSTableCellView 标签在选择时不会更改文本颜色

python - 在 Mac OS 10.8.4 上安装 PIL 时出错