2012-02-17 15 views
2

私はユーザーがデータを入力しているマルチビュープロセスを持っており、途中でモデルのクラスプロパティに保存しています。textFieldDidEndEditing "遅すぎる"

私はtextFieldDidEndEditingを使用して入力が有効であるかどうかを確認し、入力した場合は入力したデータを保存します。

私は、すべての検証がパスしたかどうかを確認し、そうであれば次のビューをロードするcontinueButtonClickedイベントがあります。私はここでモデルのプロパティを設定しません。なぜなら、各フィールドはモデル1のフィールドに一度に保存されるからです。しかし、私はいくつかの問題に気づいた。

ユーザーがテキストボックス内にあり、[続行]ボタンをクリックした場合、continueButtonClickedイベントはtextFieldDidEndEditingより前に発生します。何が起きるのかは、次のビューに保存が行われる前に「古い」モデルが表示されていることです(textFieldDidEndEditing)。

私には何が欠けていますか?すべてのプロパティを[続行]に設定するのは適切ですか?それは私がウェブ用にプログラミングしていたなら、それをやる方法ですが、それはネイティブアプリにとっては正しいとは言えません。

答えて

1

代わりにこれを試して、問題が解決するかどうか確認できますか?

textFieldShouldEndEditing: 
+0

恐ろしい!これは問題を解決したようです。私はtextFieldShouldEndEditingが2回発生する理由について少し混乱しています:すべてのフィールドのcontinueButtonClickの前に1回、continueButtonClickイベントが発生した後のアクティブなフィールドの2回目です。それは無害だが、好奇心が強い。 – jaySF

+0

これが本当に必要なアクティブなものであれば、最初のレスポンダがテストされているかどうかを常にテストして判断できます。 – mbh

4

アクティブなtextfield/textview(またはそのすべて)でresignFirstResponderと呼び出すと、textFieldDidEndEditingがトリガーされます。

一般に、このようなテキスト編集の問題では、別の方法として、入力されたすべての文字の新しい値を決定できる代理メソッド-textField:shouldChangeCharactersInRange:...を乱用することがあります。他の方法がない場合にのみ、この方法に戻すべきです。

+0

ありがとうございます。私はちょうど私がそれの周りに私の頭を包むために - 私は時間がかかるときにも、この方法を調べます。上記のmbhのソリューションは、ちょうど私が試してみると速かったのですが、私もこの1つについて興味があります – jaySF