我知道InputMethodKit 框架有一个API 参考。Objective-C中也有示例代码,但它没有提供 Swift 中的示例。
有谁知道如何在 Swift 中制作一个简单的 IME?它可以具有重复字母但什么都不做的功能,所以我可以知道它确实有效。您使用哪些 Xcode SDK 构建并成功运行它?
我知道InputMethodKit 框架有一个API 参考。Objective-C中也有示例代码,但它没有提供 Swift 中的示例。
有谁知道如何在 Swift 中制作一个简单的 IME?它可以具有重复字母但什么都不做的功能,所以我可以知道它确实有效。您使用哪些 Xcode SDK 构建并成功运行它?
为了便于阅读,我已将Apple 的NumberInput
示例代码上传到 github 存储库:
https://github.com/pkamb/NumberInput_IMKit_Sample
具体来说,我已将示例项目演示中的每个“步骤”作为自己的 git commit 上传。这样可以更轻松地区分项目工作流程。接下来看看他们如何将功能添加到示例输入法项目中。
我还尝试将Apple 的 IMKit 示例第一部分“NumberInput 0”项目从 Objective-c 转换为 Swift
如果 Swift 项目中的 "NumberInput 0" 有效,那么接下来的 NumberInput 1,2,3 可以快速转换。
Swift项目中的“NumberInput 0”可以编译、安装、添加到输入源,可以选择和运行,但是在我使用Xcode的时候,IMKInputController子类NumberInputController的方法inputText(...)不能通过按键来访问调试 NumberInput.app
NumberInput 0 仅包含 4 个文件,几行代码:
NumberInputController 列在 info.plist 中。
我已经成功地使用带有 Xcode 7 的 Objective-C 重新创建了“NumberInput 0”项目,一切正常,调试时可以通过键入键来访问 NumberInputController 函数 inputText(...)。
我是 Swift 新手,谁能帮我在 Swift 中使用“NumberInput 0”?
以下是3个文件的内容:
AppDelegate.swift
import Cocoa
import InputMethodKit
let kConnectionName = "NumberInput_1_Connection"
var server:IMKServer = IMKServer.init()
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(aNotification: NSNotification) {
let identifier = NSBundle.mainBundle().bundleIdentifier;
server = IMKServer.init(name: kConnectionName, bundleIdentifier: identifier)
}
func applicationWillTerminate(aNotification: NSNotification) {
}
}
NumberInputController.swift
import Cocoa
import InputMethodKit
class NumberInputController: IMKInputController {
override func inputText(string:String, client: AnyObject) ->Bool {
// Debug break point put here
print(string);
return false;
}
}
信息列表
...
<dict>
....
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>LSBackgroundOnly</key>
<string>1</string>
<key>InputMethodConnectionName</key>
<string>NumberInput_1_Connection</string>
<key>InputMethodServerControllerClass</key>
<string>NumberInputController</string>
<key>tsInputMethodIconFileKey</key>
<string>nine.tiff</string>
<key>tsInputMethodCharacterRepertoireKey</key>
<array>
<string>Latn</string>
</array>
</dict>
</plist>
谢谢。