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

このQ&Aのポイント
  • xcode4.5、iOS6でテキストが入力された時のイベントを捕捉する方法とは?
  • UITextFieldを継承してイベントを追加するカスタムクラスを作成したい。
  • イベントの追加方法がわからず、どうコーディングすればいいかわからない。
回答を見る
  • ベストアンサー

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

xcode4.5、iOS6です。 UITextFieldを継承して、テキストが入力された時のイベントをキャッチし、 処理を行うカスタムクラスを作成したいのですが、イベントの追加方法が わかりません。 今できているのは、単純に、クラスにUITextFieldを継承元に定義したこと だけで、その先が、調べて、何をどう書いてもイベントを捕捉できません。 http://iphone-tora.sakura.ne.jp/uitextfield.html http://iphone-tora.sakura.ne.jp/uicontrol.html このあたりを見ても、イベントの捕捉方法がわからず・・・。 どうコーディングするとイベントが捕捉できるようになるのでしょうか?

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

  • ベストアンサー
  • khp20xx
  • ベストアンサー率100% (1/1)
回答No.1

ヘッダー(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 でした。

naktak
質問者

お礼

ご回答ありがとうございます。 うーん、なんだか良く分かってないせいで、作り方が分かりません・・・。 viewDidLoadはUITextFieldには無いようなので、ダメそうです。 個人的には、  ・DecimalTextFieldクラスを、UITextFieldを継承して用意   その中で、必要なイベントを記述。(デリゲート必要?)  ・storyboardのあるViewController上にUITextFieldを設置し、   UITextFieldのCustom Class属性に、DecimalTextFieldを記述 これをするだけで、ViewController上に設置したUITextFieldは、 DecimalTextFieldの機能を有するもので、ViewController上に、 わざわざデリゲートを指示してあげたり、イベントを記述する 必要がないという認識なのですが、やり方がさっぱりです。 UITextFieldに(void)drawRectがあって、そこにNSLog()を書いて 見たら動作したので、そこに self.delegate = self; としても無限ループに陥ったみたいで、うまくいきませんでした。 セオリーが不明で、めちゃくちゃつまづいてしまってます。。。

naktak
質問者

補足

デリゲートではなく、イベントを設定することで実現できました。 【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"); }

関連するQ&A

  • iOSシミュレータでボタンが重なる

    参考書を見ながらXcodeをインストールして勉強し始めたところですが、 Storyboardで配置したボタンがiOSシミュレータ上ではボタンが重なってしまいます。 よく見ると、StoryboardはiPhone5解像度準拠で、 シミュレータは旧アスペクト比のように見えます。 初心者向けの本を読みながら進めている段階で、どうすればよいかわかりません。 正しい解決方法を教えてください。 Xcode4.6.3 iOSシミュレータ6.0

  • jQuery でドット含むカスタムイベント捕捉

    イベント名にドットを含むカスタムイベントを jQuery で捕捉するにはどのような記述をすればよいのでしょうか。 それとも不可能なのでしょうか。 問題となるのは次のようなコードです: $(element).on('my.event', listener); element.dispatchEvent(new CustomEvent('my.event')); 一行目で 'my.event' に対するコールバック listener を設定し,二行目でイベントを生じさせています。 実現したいのは,二行目の記述で listener を呼ぶことです。 しかし jQuery にとってイベント名 'my.event' が指すのは名前空間 '.event' 付きイベント 'my' のことであるため,このコードではコールバックが実行されません。 jQuery はあきらめて,この部分だけ element.addEventListener('my.event', listener); などと書くほかないのでしょうか。 回答よろしくお願いします。 このようなことをしたい理由: jQuery に依存しないオブジェクトを定義し,その中でカスタムイベントを発生させています。 そのときのカスタムイベント名にクラス名をプレフィックスとして付けているのです。 たとえば new CustonEvent('NameSpace.ClassName:click'); などです。 プレフィックスを変えれば済む話ではあるのですが,何かほかの手はないものかと質問した次第です。

  • ios SDKダウンロードについて

    iphoneアプリを作ってみようと思い、Mac book airにソフトをダウンロードしようとしています。 しかし、無線LANでのダウンロードの問題か、ダウンロードに何時間もかかるようです。 もっと早くダウンロードする方法はありませんか? また、ファイルは「Xcode3.2.6 and iOS SDK4.3」で間違いないですよね?

    • ベストアンサー
    • Mac
  • テーブルの1レコードを継承してクラスを定義する方法

    あるサイト(URLは忘れました。)で、 「  テーブルの1レコードを定義したクラスを、継承  して、新しいクラスの中でテーブルを作成する。                        」 と記載されていたのですが、コーディング上どのよう にするかを迷っております。 ご指導のほどお願いします。 記憶にある図解です。 ┌──────────┐extends 1レコードクラス │          │ │┌┬┬┬┬┬┬┬┬┐│ ││││││││││││ │└┴┴┴┴┴┴┴┴┘│ │          │ └──────────┘ ┌┐ ││が1レコードクラスに相当します。 └┘

    • ベストアンサー
    • Java
  • 作ったクラスにイベントを追加するには?

    パネルを継承したクラスを作りました(パネルA)。 そのパネルAをメインフレームに作成しました。 作ったパネルAの上にサブパネルBを作りました。 サブパネルのイベントを書きたいのですがコードは作ったクラス内に書けないのでしょうか? 例)下記が作ったパネル継承クラスです。この中でpnlSubを作っているのです。で、このpnlSubのクリックイベントを書きたいのですが、どのようにイベントを用意すればよいのでしょう? package ### import java.awt.*; public class PanelA extends Panel{ Image im; Panel pnlSub = new Panel(); //CONSTRUCT public PanelA(String img) { im = Toolkit.getDefaultToolkit().getImage(img); //MediaTracker画像入力監視 MediaTracker mt = new MediaTracker(this); mt.addImage(im, 0); try { mt.waitForID(0); } catch (InterruptedException e) { } //パネル(pnlVolume)設定 this.add(pnlVolume, null); pnlSub.setBackground(Color.red); pnlSub.setBounds(new Rectangle(5, 8, 108, 5)); } //Print public void paint(Graphics g) { if (g.drawImage(im, 0, 0, this) != true) { System.out.println("ng"); } } }

    • ベストアンサー
    • Java
  • イベントリスナーのクラスの書きどころ

    まだまだ勉強したての超初心者で拙い質問ですが、宜しくお願い致します。 AWTのFrameクラスで参考書など何も無く勉強をしていたのですが、 イベントリスナーのクラスをどこに記述するのが一番良いのか、分かりません。 BaseFrameクラス、AFrameクラス、BFrameクラスが存在し、AFrame、BFrameはBaseFrameを継承しているとします。 windowOpened()の基本となる動作(「abc」という文字列を出力とする)はBaseFrameクラスの内部クラスに記述、 その後、AFrameクラスから実行されたFrameの場合は「abc」と出力された後に「def」と出力したい。 BFrameクラスから実行されたFrameの場合は「ghi」と出力された後に「abc」と出力したい。 とした時、AFrameクラスの方はAFrameの内部クラスで定義し、addWindowListener()により追加すれば実現出来たのですが、 BFrameクラスの場合は初めにBaseFrameクラスのwindowOpened()が実行されるので実現出来ません。 とすると、BaseFrameクラスにあるイベントリスナーの内部クラスから、 AFrame・BFrameクラスで実現したいイベントリスナーのクラスまで、 全てを完全に切り分けた方が良いのか?(切り分ければ可能だと思った) しかし、そうすると、他のコントロールについても同じ対応が必要であり、 コントロールとイベントの関連性が不透明化しないか?などと考えてしまい、 どうするのが一番か悩んでいます。どなたかご教示下さい。

    • ベストアンサー
    • Java
  • Interface変数について

    C#勉強初めて間もない者です。 Interfaceについて教えて頂きたい事あります。 Interfaceとは規約を定める為のクラスで、メソッドは定義してあるだけで中身はそのInterfaceを継承したクラスで実装する物だと認識しています。 そこで以下のようなコーディングに出会い混乱しました。。。 IList loList = "22,22,".Split(','); ※へたくそな例ですがお許し下さい 上記のコーディングで、中身のないインターフェイスのloList変数が何故抽象メソッドして定義されている「Add」やプロパティ「Count」が使えるようになるのでしょうか? ご質問に答えて下さる方いらっしゃいましたら宜しくお願いします。

  • Visual-C#の event キーワードの「意義」が分かりません

    Visual-C#というものを初めて触っている者です。 フォーム上にボタン等のコントロールを配置して、ボタンをダブルクリックすると、イベントハンドラをユーザが記述するコード部分(partial class)が表示されてくるのですが(Form1.cs)、このpartial classの残りの、ユーザが編集する必要のないコードはForm1.Designer.cs内に自動生成されます。 このForm1.Designer.cs内に、たとえば this.Button1.Click += new System.EventHandler( this.Button1_Click );  ←(1) のようなコードが自動生成されているわけです。 ここで、Button1とはButtonクラスのオブジェクトであり、ClickとはButtonクラスの(Controlクラスから継承した)Clickイベントだということです。 http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.click(VS.85).aspx public event EventHandler Click  ←(2) ここで使用されているEventHandlerとは何かというと、delegateです。 http://msdn.microsoft.com/ja-jp/library/system.eventhandler.aspx public delegate void EventHandler(Object sender, EventArgs e)  ←(3) 「イベントとは、コンピュータ・プログラムの実行に際し、何らかのアクションが発生した際にプログラムに発信される信号(これをメッセージと呼んだりする)をいう。」(『ウィキペディア(Wikipedia)』) この「イベント」を、.NetFrameworkのクラスライブラリでは、(2)のように「EventHandler」という名前のデリゲートクラス型の変数として定義しているわけですが、(2)の中の「event」というキーワードの「意義」が分かりません。 Controlクラス定義内で(2)式のように、コントロールの「クリック」イベントを、「EventHandler」という名前のデリゲートクラス型の変数と定義するというのなら、それはそれで分かるのですが、なぜ更に「event」というキーワードを付ける必要があるのかが、よく分からないのです。

  • iphoneアプリ開発,カスタムUIViewの質問

    iPhoneのアプリケーション開発についての質問です。 最近アプリ開発を始めた初心者です。 XcodeのカスタムUIviewについていまいち理解ができず苦しんでおります。 作りたいのは 利用者が値を入力(例:5)→簡単な計算(例:5×2=10) →計算された長さの線を描画(例:長さ10の線が描画される) というモノなんですが 【UIviewControllerクラスにて】 (1)利用者が入力(数字)→(2)計算→(3)出力(数字) 【カスタムUIviewクラスにて】 (4)線を描画 は何とかできるのですが、上記で i、(2)から(4)へ計算結果を渡し、(2)の長さの線を(4)で描画する ii、カスタムUIviewクラスで(1)~(3)を行う iii、controllerクラスで(4)のように線を描画する の、どれかをすることは可能でしょうか? また、根本的に違う方法(カスタムUIviewは用いない等)でも構いません、 上記のように入力した値を計算処理の後描画させる方法があれば教えていただけませんでしょうか。 詳しい方には初歩的すぎて恐縮なのですがどうぞよろしくお願いします。

  • 構造体がObjectクラスを継承していることについて

    本を読んでいましたら、構造体はObjectクラスを継承している とありました。 実際構造体を定義して使用してみると、 「ToString」メソッドが存在するなどで、継承されているのだな と思うのですが、 構造体はObjectクラスを継承しています という情報はどのように確認すれば良いのでしょうか? 同じようにクラスがどのクラスを継承していますという情報も確認できたら嬉しいです。 Structure ステートメントのヘルプを見ても載っていないように感じました。 確認方法が知りたいです。 もし宜しければ、ご回答お願い致します。