UITextView あるいはUITextField への入力を検知する

投稿者: | 2013/01/28

今日にもMOLESKINE のThe HOBBIT Edition が届くので、今使っている子(MOLESKINE プレーン・ポケット)を早く使い切るべく、モレスキンお蔵出しを増量開始です。 *01【早く使い切るべく】動機がどうにも酷いですが、結果オーライで。

 

UITextView (あるいはUITextField )への入力を検知したい

文字数カウントをはじめ、テキストフィールドへの入力都度、何らかの処理を走らせたい場合というのは多いです。
その割には、まいど忘れちゃうので、例によって備忘録的に。

 

showChangeTextInRange: を使う。

UITextView もUITextField も、内容変更を検出するdelegate メソッドを持っています。
それがshowChangeTextInRange:メソッドです。
(ちなみに、UITextField はshowChangeCharactersInRange:)

 

使い方

 

1..hファイルのプロトコルにUITextViewDelegate (またはUITextFieldDelegate )を設定

delegate メソッドなので、ヘッダーファイルでプロトコル継承が必要です。

// MyViewController.h

#import 

@interface MyViewController : UIViewController 
// UITextField の場合はUITextFieldDelegate
/* 以下略*/

 

2..mファイルにdelegate メソッドを実装

.mファイルに以下のdelegate メソッドを実装します。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
    // ここに入力検知時に実行させたい処理を記述
    
    return YES;
}

以上。

 

なんか挙動が微妙なので注意

2011年の記事ですが、こんなんもありました。
どうもdelegate関数の呼び出しトリガーや文字数カウントにiOSのバージョンによる違いがある模様。
現状どうなっているのか、ちゃんと確認しておく方が良さげ。

iOS5のテキスト入力チェックイベントの挙動に注意!(shouldChangeCharactersInRange/shouldChangeTextInRange) – あらきんぐのiPhoneアプリ開発ブログ

 



 

脚注

脚注
01 【早く使い切るべく】動機がどうにも酷いですが、結果オーライで。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください