如何在Swift中为Mac OS X开发一个简单的输入法?

时间:2015-01-07 05:46:34

标签: swift xcode macos ime input-method-kit

我知道有一个API reference for the InputMethodKit framework。在Objective-C中也有sample code,但它并没有在Swift中提供一个例子。

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

2 个答案:

答案 0 :(得分:2)

我已将Apple's NumberInput sample code上传到github repo以便于阅读:

https://github.com/pkamb/NumberInput_IMKit_Sample

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

答案 1 :(得分:-1)

我也尝试转换Apple's IMKit sample第一部分" NumberInput 0"项目从Objective-c到Swift

如果" NumberInput 0"在Swift项目中,然后跟随NumberInput 1,2,3可以快速转换。

" NumberInput 0"在Swift项目中可以编译,安装,添加到输入源,可以选择和运行,但IMKInputController子类NumberInputController的方法inputText(...)在我使用时不能通过键入键来到达Xcode调试NumberInput.app

NumberInput 0只包含4个文件,几行代码:

  1. AppDelegate.swift
  2. NumberInputController.swift
  3. MainMenu.xib
  4. 的Info.plist
  5. NumberInputController列在info.plist中。

    我已成功重新创建" NumberInput 0"项目使用Objective-C和Xcode 7,所有工作,NumberInputController函数inputText(...)可以通过在调试时键入键来实现。

    我是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;
        }
    }
    

    <强>的Info.plist

    &#13;
    &#13;
     ...
    <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>
    &#13;
    &#13;
    &#13;

    感谢。