こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【iOS】TextFieldでテキスト入力イベント

xcode4.5、iOS6です。

UITextFieldを継承して、テキストが入力された時のイベントをキャッチし、
処理を行うカスタムクラスを作成したいのですが、イベントの追加方法が
わかりません。

今できているのは、単純に、クラスにUITextFieldを継承元に定義したこと
だけで、その先が、調べて、何をどう書いてもイベントを捕捉できません。
http://iphone-tora.sakura.ne.jp/uitextfield.html
http://iphone-tora.sakura.ne.jp/uicontrol.html
このあたりを見ても、イベントの捕捉方法がわからず・・・。

どうコーディングするとイベントが捕捉できるようになるのでしょうか?

投稿日時 - 2012-12-06 23:08:50

QNo.7833223

すぐに回答ほしいです

質問者が選んだベストアンサー

ヘッダー(xxx.h)に
 @interface xxxx
 <UITextFieldDelegate>//delegate使う宣言

ってつけてあると

xxx.mの中のviewDidLoadメソッドあたりで

-(void)viewDidLoad{
...
UITextFiled *tf = ...initのかくやつ。
tf.delegate;//<-delegateをこのクラスでつかう宣言がしてあれば
[self.view addSubView:tf];
}

⬇入力したときとかに このメソッドとかが呼び出されるかもしれません~
//delegate method
- (void)textFieldDidEndEditing:(UITextField *)textField {
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
}

ためしてないでぐぐっただけなので
見当違いだったらすみません。。

拝見したのは、
http://d.hatena.ne.jp/tomute/20091120/1258780317
でした。

投稿日時 - 2012-12-06 23:35:37

補足

デリゲートではなく、イベントを設定することで実現できました。

【DecimalTextField.m】
- (id)initWithCoder:(NSCoder *)aDecoder {
  self = [super initWithCoder:aDecoder];
  if (self) {
    [self addTarget:self action:@selector(textFieldDidBeginEditing:) forControlEvents:UIControlEventEditingChanged];
  }
  
  return self;
}


- (void)textFieldDidBeginEditing:(UITextField *)textField {
  NSLog(@"test");
}

投稿日時 - 2012-12-12 10:18:18

お礼

ご回答ありがとうございます。

うーん、なんだか良く分かってないせいで、作り方が分かりません・・・。
viewDidLoadはUITextFieldには無いようなので、ダメそうです。

個人的には、
 ・DecimalTextFieldクラスを、UITextFieldを継承して用意
  その中で、必要なイベントを記述。(デリゲート必要?)
 ・storyboardのあるViewController上にUITextFieldを設置し、
  UITextFieldのCustom Class属性に、DecimalTextFieldを記述

これをするだけで、ViewController上に設置したUITextFieldは、
DecimalTextFieldの機能を有するもので、ViewController上に、
わざわざデリゲートを指示してあげたり、イベントを記述する
必要がないという認識なのですが、やり方がさっぱりです。

UITextFieldに(void)drawRectがあって、そこにNSLog()を書いて
見たら動作したので、そこに
self.delegate = self;
としても無限ループに陥ったみたいで、うまくいきませんでした。

セオリーが不明で、めちゃくちゃつまづいてしまってます。。。

投稿日時 - 2012-12-07 00:15:47

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)