iosにて漢字の単語の読みを取得したい
上記の回答を参考にして文字を渡すとカタカナで返却するメソッドを作成しました。
リアルタイムは難しいですが、入力が終了したタイミング(フォーカスが外れたタイミング)等でテキストフィールドから文字列を取得してカタカナに変換、カタカナをフリガナ用のテキストフィールド設定とすることでやりたいことはできると思います。
参考してみてください。
swift
1func changeToKatakanaString(str: String) -> String {
2
3 let inputText = str as NSString
4
5 let outputText = NSMutableString()
6
7 var range: CFRange = CFRangeMake(0, inputText.length)
8 let locale: CFLocaleRef = CFLocaleCopyCurrent()
9
10 /* トークナイザーを作成 */
11 let tokenizer: CFStringTokenizerRef = CFStringTokenizerCreate(kCFAllocatorDefault, inputText as CFStringRef, range, kCFStringTokenizerUnitWordBoundary, locale)
12
13 /* 最初の位置に */
14 var tokenType: CFStringTokenizerTokenType = CFStringTokenizerGoToTokenAtIndex(tokenizer, 0)
15
16 /* 形態素解析 */
17 while tokenType != .None {
18 range = CFStringTokenizerGetCurrentTokenRange(tokenizer)
19
20 /* ローマ字を得る */
21 let latin: CFTypeRef = CFStringTokenizerCopyCurrentTokenAttribute(tokenizer, kCFStringTokenizerAttributeLatinTranscription)
22 let romaji = latin as! NSString
23
24 /* カタカナに変換 */
25 let furigana: NSMutableString = romaji.mutableCopy() as! NSMutableString
26 CFStringTransform(furigana as CFMutableStringRef, nil, kCFStringTransformLatinKatakana, false)
27
28 outputText.appendString(furigana as String)
29 tokenType = CFStringTokenizerAdvanceToNextToken(tokenizer)
30 }
31
32 return outputText as String
33}
34
使用例
swift
1let fullName = changeToKatakanaString("田中太郎")
2//=> タナカタロウ