次のコードがあるとしましょう:
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
に、ユーザーがこれまでに入力した正確な文字列を反映させたい)。
結局のところ、これを行う最も簡単な方法は、Interface Builderを使用することです。
魅力のように機能します:)(私はこれに何日も費やしたとは信じられず、今では解決策が思ったよりもはるかに簡単だったことに気付きました:P)
テキストフィールドでイベントUIControlEventEditingChangesのアクションを登録できます。
[nameTextField addTarget:self action:@selector(updateLabelUsingContentsOfTextField:) forControlEvents:UIControlEventEditingChanged];
...
// TODO: error checking
- (void)updateLabelUsingContentsOfTextField:(id)sender {
greetingLabel.text = [NSString stringWithFormat:@"Hello %@", ((UITextField *)sender).text];
}
UITextField
には通知UITextFieldTextDidChange
があり、登録するとテキストが変更されるたびに起動されます。その通知に登録し、通知によって呼び出されるメソッドで、ラベルのテキストを変更します。
これに追加するには、通知ハンドラーに渡されるオブジェクトにUITextField
のテキストが含まれます。
お役に立てば幸いです。