2週間連続で原稿を落としたmasudaです。
こんにちは。
あまりググればわかるということは書きたくはないなと思っているので、なかなかネタを見つけるのは難しいです。
今回はiPhoneアプリを書いているときにはまったところで、ググってもなかなか答えが見つからないことを書きたいと思います。
2つあるので2週間はこれで持つ!
とあるUITextFieldによる入力フォームと、UIBarButtonItemによる「完了」ボタンがある画面を考えます。
今回のエントリの目的はUITextFieldに文字が入力されていない、つまり空であるときは、「完了」ボタンを表示しない画面を作成するということです。
ポイントはUIControlEventEditingChangedイベントを使うこと。
最初はUITextFieldDelegateのtextField:shouldChangeCharactersInRange:replacementString:とかを使用することを考えましたが、文字を消去したときにボタンが消えない等々うまくいきませんでした。
サンプルコードを書いてみます。
- (void)setupUserInterface { UIView *contentView; UITextField *textField; contentView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; [self setView:contentView]; [contentView release]; doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(respondsToDoneButtonTouchDown:)]; textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 100, 20)]; [contentView addSubview:textField]; [textField release]; [textField addTarget:self action:@selector(respondsToEditingChanged:) forControlEvents:UIControlEventEditingChanged]; } - (void)respondsToEditingChanged:(id)sender { if ([sender isKindOfClass:[UITextField class]]) { // 本当はsenderを用いずにメンバ変数とかにしておけばいいのだけれど、今回はあえて型変換をしてみる。 if ([[(UITextField *)sender text] length]) { [[self navigationItem] setRightBarButtonItem:doneButton animated:YES]; } else { [[self navigationItem] setRightBarButtonItem:nil animated:YES]; } } }
参考
Disable button if textField is empty - iPhone SDK Development