タブ付きビューにフォームがあります。フィールドのいずれかが変更されたフォームをダーティにマークし、フォームがダーティな場合は(「保存」ボタンの代わりに)「保存」/「キャンセル」でアクションシートをポップアップしたい。処理中の ActionSheet にユーザーが応答するまで、ビューが消える (またはビュー スタックから削除される) のを止める方法はありますか?
2 に答える
いくつかの考え:
Apple のヒューマン インターフェイス ガイドライン(HIG) が、この慣行を明示的に思いとどまらせていることは注目に値します。彼らは、アプリは「必要な場合にのみ保存するようユーザーに求める」べきだと提案しています。なぜなら、人々は「明示的にキャンセルまたは削除しない限り、自分の作業は常に保存されているという確信を持つべきだからです」。おそらくあなたの場合、この機能を持つことは重要ですが、一般的にはお勧めできません。
別の方法として、ユーザーに古い設定に戻す機会を与えたい場合は、「元に戻す」ボタンを提供することです。そうすることで、HIG を尊重し、効果的に自動保存しますが、ユーザーに以前の値に明示的に戻すこともできます。彼らが本当に必要な場合。
他の人が指摘したように、保存または破棄を求めるという概念は
viewWillDisappear
まったく機能しません。論理的にはプロセスが遅すぎます。viewWillDisappear
あまりにも多くの理由で呼び出される可能性があり、その多くはあなたの制御下にありません。また、そのメソッドにすぐに戻らないこと、新しいユーザー インターフェイス要素を導入することなどは適切ではありません。「保存」と「キャンセル」のユーザーインターフェイスが本当に必要な場合は、モーダルインターフェイスのほうが適しています(または、タブバーのビューコントローラーに戻るためにポップオフする必要がある新しいビューコントローラーをプッシュします)。タブバー インターフェイスではなく、保存ボタンとキャンセル ボタンを使用します。たとえば、タブ バー ビューに現在の値を表示できます。「編集」ボタンをタップすると、保存ボタンとキャンセル ボタンのある新しいビューがプッシュされます。これがあなたのケースで論理的かどうかをアドバイスできるほど、私たちはあなたのアプリについて十分に知りません。(別のアプローチについては、View Controller で編集モードを有効にするを参照してください。)
viewWillDisappear:
アプリが呼び出された時点まで進行すると、ビューが消えるのを止めることはできません。行うことは、次のような関数を作成することです。
- (void)saveAndClose {
//Display sheet asking user what they want to do
}
- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated
{
if (buttonIndex == 0) // 0 or whatever the index of your save button is
{
// Perform save functions
}
[self dismissModalViewControllerAnimated:YES]; // or pop the view controller if appropriate
}