【发布时间】:2010-10-05 01:12:44
【问题描述】:
如果在我的应用程序中选择了任何文本输入字段,我需要显示系统键盘。我似乎找不到任何有关如何执行此操作的资源。有什么建议吗?
编辑:我问这个问题是因为我正在制作一个全屏应用程序并且需要根据用户选择显示/隐藏。
谢谢,
光辉
【问题讨论】:
如果在我的应用程序中选择了任何文本输入字段,我需要显示系统键盘。我似乎找不到任何有关如何执行此操作的资源。有什么建议吗?
编辑:我问这个问题是因为我正在制作一个全屏应用程序并且需要根据用户选择显示/隐藏。
谢谢,
光辉
【问题讨论】:
您找不到该信息的原因是它是 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;
}
这是一个核心基础类型的 API,所以如果你知道 Cocoa,用法是相似的; Core Foundation 基本上是NSObjects 的 C API。大多数情况下,您可以使用免费桥接,请参阅this SO question。在垃圾收集环境中保留/释放它们时需要小心。 TIS 在 10.5 中引入;我不知道为什么苹果当时没有将它作为 Cocoa API 引入。
显然他们当时还没有下定决心要处理掉 64bit Carbon。
【讨论】:
setLevel: 将其设置为低于键盘的窗口级别。