UITableView のセルに UITextField を保持したカスタム セルを用意し、設定値を入力できるようにした。
画面に”登録”ボタンを配置したが、UITextField に設定値を入力編集後、”登録”ボタンを押下し、画面遷移すると設定値が保存されていないという問題が発生した。
原因は、以下の通り。
UITextField の UIControlEventEditingDidEndOnExit コントロール イベントを取得し、編集終了と判断して入力された設定値を保存しようとしていたが、UIControlEventEditingDidEndOnExit の通知を受ける前に”登録”ボタン押下時の処理が行われていた。
結果、編集した設定値を保存する前に画面遷移が行われていたのが問題だと分かった。
というわけで、
(対処前)”登録”ボタン押下処理 → (変更前の)設定値 保存 → UITextField 編集終了の通知
(対処後)UITextField 編集終了の通知 → “登録”ボタン押下処理 → (変更後の)設定値 保存
“対処後”の順番で処理が行われるように、NSRunLoop クラスを利用して UITextField 編集終了の通知を受けるまで、処理を一時停止するようにした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // 登録ボタンが押下された際の処理 - (void)registerButtonAction { // 編集終了通知が受信されるまで待つ (0.5秒間隔で受信確認する) while (!didEndEditingFlag_) { // ソフトキーボードが表示されている場合、非表示にしないと編集終了通知がされないため、非表示とする [editingTextField_ resignFirstResponder]; // 処理を一時停止し NSRunLoop へ制御を戻す // 0.5秒後、処理を再開する [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]]; } // 設定情報マネージャへデータを保存する [self writeSettingManagerValue]; : : |