textView: shouldChangeTextInRange: replacementText: 内で新しい文字列を作る
UITextViewクラスを使う時、入力された文字が何なのかをチェックする場合なんかに次のデリゲートメソッドを使うことがあります。
次のコードは'Apple'と文字を入力した時に引数の内容を表示するコードとその結果です。


ふんふん、なるほど。 textView.textは入力前の文字列が入ってるんだな。 で、textで入力された文字が入ってると。 NSRangeオブジェクトには位置とかが入っているのか。
ところで、これらの内容から入力後の文字列をすぐに得たかったのですが、、、
え、もしかして、入力された位置を特定して分解して挿入とかそういうややこしい処理になっちゃうの、、、?
とか思っていたのですが、ありがたいことに使えるメソッドがNSStringクラスにありました。
stringByReplacingCharactersInRange:withString:
これを使って上のコードを書き換えたコードと結果を以下に:

お~、一撃じゃねえかっ!
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)textこのメソッドはユーザーが文字を入力するたびにコールされます。
次のコードは'Apple'と文字を入力した時に引数の内容を表示するコードとその結果です。
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { NSLog(@"'%@' text:%@ , loc:%d , len:%d",textView.text , text , range.location , range.length); return YES; }


ふんふん、なるほど。 textView.textは入力前の文字列が入ってるんだな。 で、textで入力された文字が入ってると。 NSRangeオブジェクトには位置とかが入っているのか。
ところで、これらの内容から入力後の文字列をすぐに得たかったのですが、、、
え、もしかして、入力された位置を特定して分解して挿入とかそういうややこしい処理になっちゃうの、、、?
とか思っていたのですが、ありがたいことに使えるメソッドがNSStringクラスにありました。
stringByReplacingCharactersInRange:withString:
これを使って上のコードを書き換えたコードと結果を以下に:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { NSString *newString = [textView.text stringByReplacingCharactersInRange:range withString:text]; NSLog(@"'%@' text:%@ , loc:%d , len:%d → %@",textView.text , text , range.location , range.length , newString); return YES; }

お~、一撃じゃねえかっ!
スポンサーサイト
<< masksToBoundsでもマスクできる! TopPage Xcode 4.2 beta 6をダウンロードしてみた >>
トラックバック
トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/499-97154142
https://ringsbell.blog.fc2.com/tb.php/499-97154142