3

テキストフィールドを含むセルを持つ UITableView があります。ユーザーが各テキスト フィールドを編集するとき、セルのテキスト フィールドの値を追跡する必要があります (セルが表示されなくなった場合でも、テキスト フィールドを追跡するだけでは機能しません)。そこで、Key-Value Observing を使用して、UITableViewController サブクラスの各テキスト フィールドにオブザーバーを設定しました。

[cell addObserver:self forKeyPath:@"textField.text" options:NSKeyValueObservingOptionNew context:nil];

observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)contextそして、クラスのメソッドのテキスト フィールドに新しい変更を保存します。

これは iOS 6 ではうまく機能しますが、iOS 7 では、ユーザーがテキスト フィールドの値を変更しても KVO は呼び出されません。どうやら、キーボードの「完了」を押して呼び出されるセッターメソッドは、KVO を呼び出さなくなりました。

これに対する回避策はありますか? または、この変更を聞くより良い方法はありますか? テキスト フィールドが属するセルを知る必要があるため、テキスト フィールドのメソッドを実装してもうまくいきeditingDidEndません。

前もって感謝します。

4

1 に答える 1

1

これに対する回避策があるかどうかはわかりませんが、UITextField テキスト値をリッスンするより良い方法があることは確かです。UITextField のインスタンスをプログラムで作成している場合は、テキスト変更イベントについてクラスに通知するイベント ハンドラーを追加するだけです。例えば:

[myTextField addTarget:self action:@selector(editingChanged:) forControlEvents:UIControlEventEditingChanged];


- (void)editingChanged:(UITextField *)sender {
  NSString *targetText = sender.text;
}
于 2013-09-19T17:51:27.073 に答える