日々精進

新しく学んだことを書き留めていきます

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)inputTextで入力後の文字列を取得する

以下のDelegateメソッドを使うとUITextFieldに文字を入力するたびに文字入力前の文字列と入力した文字が取得できる。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)inputText

入力後の文字列を取得するには以下のようにする。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)inputText{
    // 入力後の文字列を取得することはできないため、入力前の文字列と入力された文字列をつなげる
    NSMutableString *afterInputText = textField.text.mutableCopy;
    [afterInputText replaceCharactersInRange:range withString:inputText];
    return YES;
}

ただし日本語をローマ字入力していると「とよt」の次に「a」を入力した場合、afterInputTextが「とよta」になる。これを「とよた」にするには以下のようにローマ字→ひらがな変換を行う。

        // アルファベット→ひらがな
        CFStringTransform((__bridge CFMutableStringRef)afterInputText, NULL, kCFStringTransformLatinHiragana, NO);

でもこのローマ字→ひらがな変換の仕様がいまいち。。具体的には「sinn」→「せぃっん」とか変換される。
これは変換処理を自分で書くしかないのか。。