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(ユーザーがこれまでに入力した正確な文字列を反映したい)。

4

3 に答える 3

198

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

  • IBActionを追加します(たとえば、この場合のように、ViewControllerに)
  • Ctrlキーを押しながらInterfaceBuilderのUITextFieldをクリック(または右クリック)します
  • 「EditingChanged」イベントを、最初のステップで追加したファイルの所有者のIBActionに接続します。

魅力のように機能します:)(私はこれに何日も費やしたとは信じられません、そして今、解決策が私が思っていたよりもはるかに単純であることに気づきました:P)

于 2008-12-23T10:26:52.737 に答える
102

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

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

...

// TODO: error checking

- (void)updateLabelUsingContentsOfTextField:(id)sender {

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

}
于 2008-12-23T08:19:22.043 に答える
11

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

これに加えて、通知ハンドラに渡されるオブジェクトには、UITextField.

それが役立つことを願っています。

于 2008-12-23T09:34:31.890 に答える