web-dev-qa-db-ja.com

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

次のコードがあるとしましょう:

IBOutlet UITextField* nameTextField;
IBOutlet UILabel* greetingLabel;

ユーザーが任意のキーを押すとすぐに、[Hello [nameTextField]]をgreetingLabelに読みたいです。

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

textField:shouldChangeCharactersInRange:キー入力が発生するたびにデリゲートメソッドが呼び出されます。

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

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

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

107
PlagueHammer

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

  • IBActionを追加します(たとえば、この場合のようにViewControllerに)
  • Interface BuilderのUITextFieldをCtrlキーを押しながらクリック(または右クリック)
  • 「編集の変更」イベントを、最初の手順で追加されたファイルの所有者のIBActionに接続します。

魅力のように機能します:)(私はこれに何日も費やしたとは信じられず、今では解決策が思ったよりもはるかに簡単だったことに気付きました:P)

195
PlagueHammer

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

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

...

// TODO: error checking

- (void)updateLabelUsingContentsOfTextField:(id)sender {

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

}
101
Ax

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

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

お役に立てば幸いです。

10
lostInTransit