キーストロークが入力されたときにUITextFieldの値を取得しますか?


107

次のコードがあるとします。

IBOutlet UITextField* nameTextField;
IBOutlet UILabel* greetingLabel;

greetingLabelユーザーが任意のキーを押したらすぐに、「Hello [nameTextField]」を読みたいと思います。

基本的に必要なのは、Cocoaデリゲートメソッドに相当するiPhone controlTextDidChangeです。

textField:shouldChangeCharactersInRange:デリゲートメソッドは、キーストロークが発生するたびに呼び出されます。

- (BOOL)              textField:(UITextField *)textField
  shouldChangeCharactersInRange:(NSRange)range     
              replacementString:(NSString *)string

文字列引数は、押された文字を返します。ただし、実際textFieldの値(nameTextField.text)は空白のままです。

ここで何が欠けていますか?(nameTextFieldユーザーがこれまでに入力した正確な文字列を反映したいと思います)。

回答:


197

これを行う最も簡単な方法は、Interface Builderを使用することです。

  • IBActionを追加します(この場合、ViewControllerに追加します)。
  • Interface BuilderのUITextFieldでCtrl-クリック(または右クリック)
  • 「Editing Changed」イベントを、最初のステップで追加したファイルの所有者のIBActionに接続します。

魅力のように機能します:)(これに何日も費やしたとは信じられません。解決策が思ったよりもずっと簡単だったことに気づきました:P)


2
ありがとう!UISliderなどで使用するように「値が変更されました」を使用してきました。同じ動作をしているように見える2つのイベントがあるのは興味深いことです。
wjl 2011

1
何らかの理由で、これを行うためのプログラム的な方法がまだ欲しかったのですが、私は譲りました...この方法はロックです!共有してくれてありがとう...以前にそれを見たことがありますが、コーディングの数日後、私の脳はもう機能していません。
Albert Renshaw

8
@AlbertRenshawしかし、これはプログラム的な方法で実行でき[textField addTarget:self action:@selector(textFieldEditingChanged:) forControlEvents:UIControlEventEditingChanged]ます;)実行するだけです;)。
2015年

101

テキストフィールドにイベントUIControlEventEditingChangesのアクションを登録できます。

[nameTextField addTarget:self action:@selector(updateLabelUsingContentsOfTextField:) forControlEvents:UIControlEventEditingChanged];

...

// TODO: error checking

- (void)updateLabelUsingContentsOfTextField:(id)sender {

    greetingLabel.text = [NSString stringWithFormat:@"Hello %@", ((UITextField *)sender).text];

}

Interface Builderを使用してこれを指定する方法はありますか?
PlagueHammer 2008

11

UITextFieldUITextFieldTextDidChange登録すると、テキストが変更されるたびに発生する通知があります。その通知に登録し、通知によって呼び出されるメソッドで、ラベルのテキストを変更します。

これに追加するには、通知ハンドラに渡されるオブジェクトにのテキストが含まれUITextFieldます。

お役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.