4

我知道InputMethodKit 框架有一个API 参考。Objective-C中也有示例代码,但它没有提供 Swift 中的示例。

有谁知道如何在 Swift 中制作一个简单的 IME?它可以具有重复字母但什么都不做的功能,所以我可以知道它确实有效。您使用哪些 Xcode SDK 构建并成功运行它?

4

2 回答 2

2

为了便于阅读,我已将Apple 的NumberInput示例代码上传到 github 存储库:

https://github.com/pkamb/NumberInput_IMKit_Sample

具体来说,我已将示例项目演示中的每个“步骤”作为自己的 git commit 上传。这样可以更轻松地区分项目工作流程。接下来看看他们如何将功能添加到示例输入法项目中。

于 2015-06-14T01:53:49.620 回答
-2

我还尝试将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 个文件,几行代码:

  1. AppDelegate.swift
  2. NumberInputController.swift
  3. 主菜单.xib
  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>

谢谢。

于 2016-01-29T02:58:52.420 回答