2015-01-07 2 views
3

Я знаю, что есть API reference for the InputMethodKit framework. И есть объект sample code в Objective-C, но он не является примером в Swift.Как разработать простой метод ввода для Mac OS X в Swift?

Кто-нибудь знает, как сделать простой IME в Swift? Он может иметь такие функции, как повторение буквы, но просто ничего не делать, поэтому я знаю, что это действительно работает. С какими Xcode SDK вы его создаете и успешно запускаете?

ответ

2

Я загрузил Apple's NumberInput sample code на GitHub репо для облегчения читаемости:

https://github.com/pkamb/NumberInput_IMKit_Sample

В частности, я загрузил каждый «шаг» в демонстрации образец проекта, как его собственный мерзавец совершал. Это позволяет значительно упростить рабочий процесс проекта. Следуйте за ними, чтобы узнать, как добавить функции в проект Input Method.

+1

Проект Pkamb по-прежнему находится в объективе-c, а не в Swift. – heMac

-1

Я также попытался преобразовать Apple's IMKit sample первую часть «0 Ввод числа» проект от Objective-C Свифта

Если «0 Ввод числа» в Swift проектных работ, то следующие 1,2,3 Ввод числа могут быть преобразованы быстро ,

«NumberInput 0» в проекте Swift может быть скомпилирован, установлен, добавлен в источники ввода, может быть выбран и запущен, но подкласс IMKInputController NumberInputController inputText (...) не может быть достигнут, набрав клавиши, когда Я с помощью Xcode для отладки NumberInput.app

0 Ввод числа просто включает в себя только 4 файла, несколько строк кода:

  1. AppDelegate.swift
  2. NumberInputController.swift
  3. MainMenu.xib
  4. Info.plist

NumberInputController указана в info.plist.

Я успешно воссоздал проект «NumberInput 0» с использованием Objective-C с Xcode 7, все работает, функция ввода NumberInputController inputText (...) может быть достигнута путем ввода ключей при отладке.

Я новичок в Swift, может ли кто-нибудь помочь мне получить «NumberInput 0» в Swift?

Ниже приведены содержание 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; 
    } 
} 

информация.PLIST

... 
 
<dict> 
 
\t .... 
 
    <key>NSMainNibFile</key> 
 
\t <string>MainMenu</string> 
 
\t <key>NSPrincipalClass</key> 
 
\t <string>NSApplication</string> 
 
\t <key>LSBackgroundOnly</key> 
 
\t <string>1</string> 
 
\t <key>InputMethodConnectionName</key> 
 
\t <string>NumberInput_1_Connection</string> 
 
\t <key>InputMethodServerControllerClass</key> 
 
\t <string>NumberInputController</string> 
 
\t <key>tsInputMethodIconFileKey</key> 
 
\t <string>nine.tiff</string> 
 
\t <key>tsInputMethodCharacterRepertoireKey</key> 
 
\t <array> 
 
\t \t <string>Latn</string> 
 
\t </array> 
 
</dict> 
 
</plist>

Спасибо.

+0

на основе метода набора входных данных, я разработал полностью функциональный метод ввода в Objective-c и поделился с GitHub: https: //github.com/HeChinese/OpenHeInput-MacOS – heMac

+0

Обратите внимание, что это не «ответ», потому что он не является рабочим примером, поэтому этот вопрос остается без ответа. –