以下の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」→「せぃっん」とか変換される。
これは変換処理を自分で書くしかないのか。。