私はUITabBarController内にUINavigationControllerを持っています。ナビゲーションコントローラには、アイテムを編集するためのUITableViewとフォームがあります。問題は、編集中にタブがタップされると、フォームが消去され、ユーザーがUITableViewにダンプされることです。iOS - 表示からナビゲートするときのプロンプト
編集ビューからのナビゲーションを確認するためのプロンプトを追加する方法はありますか?
私はUITabBarController内にUINavigationControllerを持っています。ナビゲーションコントローラには、アイテムを編集するためのUITableViewとフォームがあります。問題は、編集中にタブがタップされると、フォームが消去され、ユーザーがUITableViewにダンプされることです。iOS - 表示からナビゲートするときのプロンプト
編集ビューからのナビゲーションを確認するためのプロンプトを追加する方法はありますか?
最後に、矢印のようなカスタムUIBarButtonItemを使用して解決しました。
まず、.hにBOOLを宣言して編集状態を保存します。また、後で選択した行を格納するために使用する一時変数も宣言します。あなたのviewDidLoadで
BOOL isEditing;
NSUInteger selectedRow;
、あなたはその後、UITextFieldDelegate
とUIAlertViewDelegate
にあなたのビューコントローラを適合することができますNO
- (void)viewDidLoad {
// initialization
isEditing = NO;
[super viewDidLoad];
}
にブール値を初期化します。テキストフィールドデリゲートは、編集が終了し、テキストフィールドの開始時にコントローラがコールバックを受信できるようにし、アラートビューデリゲートは、アラートビューが閉じられたときにコールバックを受け取ることを許可します。
また、すべてのテキストフィールドの代理人をコントローラに割り当てるように設定する必要があります。 :今そうなどは、以下の2つのメソッドを実装する - あなたがこれをしたら、あなたは、すべてのテキストフィールドからのコールバックを受信するように設定されている
textField.delegate = self;
:だから、あなたがテキストフィールドを追加するときに、あなたのcellForRowAtIndexPath
でこれだけを追加
- (void)textFieldDidBeginEditing:(UITextField *)textField {
isEditing = YES;
}
- (void)textFieldDidEndEditing:(UITextField *)textField {
isEditing = NO;
}
は、今ここで重要なのは、(あなたは、通常、テーブルビューの行が選択されているだろうというときのように)ので、ちょうどこのような何かを、次のビューをプッシュするための別の方法を作ることです。
- (void)showNextView {
// in this method create the child view controller and push it
// like you would normally when a cell is selected
// to get the selected row, use the `selectedRow` variable
// we declared earlier.
}
これで、ユーザーが行を選択したときにテーブルビューコールバックを実装する必要があります。このメソッドでは、編集中であるかどうかをテストし、編集中の場合はプロンプトを表示します。そうでない場合は、次のビューに進みます。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
selectedRow = [indexPath row];
if (isEditing) {
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Continue Editing?"
message:@"Continue Editing or discard edits"
delegate:self
cancelButtonTitle:@"Discard"
otherButtonTitles:@"Continue"];
[alert show];
[alert release];
return;
}
[self showNextView];
}
最後に、我々はアラートビューが却下されたときのアラートビューのデリゲートのコールバックを実装する必要があります。
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
if (buttonIndex != [alertView cancelButtonIndex]) return; // stay editing
[self showNextView];
}
すべてが理にかなって、あなたに役に立つことを願っています!
しかし、私はストーリーボードを使用しているので、エディットコントローラーは親ビューコントローラー内にあることがわかる限り知識がありません。 – Echilon
あなたはUINavigationControllerを使用しているので、あなたがスタック上に、この「フォーム」を推進している場合、あなたは
@property(nonatomic) BOOL hidesBottomBarWhenPushed
彼らは形で行われるまで、タブバーを非表示にすることでしょうそのように設定することができます。
私は理解していません - "フォーム"とは何ですか?また、uinavigationcontrollerがビューを変更したとき、またはtabbarcontrollerがビューを変更したときに「確認」アラートを表示しますか?あなたの投稿は1つのものと別のタグを示しています:P – DanZimm
"フォーム"はストーリーボードを介してセグに表示される別のUIViewControllerです。理想的には、私は両方のプロンプトを追加しますが、私は技術が同じであると思います。 – Echilon