【问题标题】:Display System Keyboard Mac application?显示系统键盘 Mac 应用程序?
【发布时间】:2010-10-05 01:12:44
【问题描述】:

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

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

谢谢,
光辉

【问题讨论】:

    标签: cocoa macos


    【解决方案1】:

    您找不到该信息的原因是它是 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: 将其设置为低于键盘的窗口级别。
    • 糟糕,没有看到您的回复并发布了一个附加问题。让我跟进 - stackoverflow.com/questions/4026003/…
    猜你喜欢
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    相关资源
    最近更新 更多