この質問に対する古い答えをたくさん見つけましたが、それらはすべて2歳以上です。
左ボタンのリスナー、つまり「戻る」ボタンを追加したいと思います。UIAlertViewを表示してから、応答を待ちます-YES/NO。
新しいSDKで可能ですか?
この質問に対する古い答えをたくさん見つけましたが、それらはすべて2歳以上です。
左ボタンのリスナー、つまり「戻る」ボタンを追加したいと思います。UIAlertViewを表示してから、応答を待ちます-YES/NO。
新しいSDKで可能ですか?
はい、次の方法で戻るボタンのイベントを自分でキャッチして処理することで、これを行うことができます。
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonPressed:)];
メソッドでアラートを表示できます。
- (void)backButtonPressed:(id)sender {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Notice" message:@"Going back?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok"];
[alert show];
}
次に、UIAlertDelegate メソッドで
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 1) { // Button index: Cancel = 0; Ok = 1;
[self.navigationController popViewControllerAnimated:YES];
}
}
システムを「チート」して、独自の矢印型の「戻る」ボタンでカスタム UINavigationBar を表示することができます。このようにして、動作を完全に操作でき、デフォルトの動作に制限されません。
これを行う1つの方法を次に示します。これが唯一の方法かどうかはわかりませんが、これは私にとってはうまくいきます:
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if (animated) {
NSLog(@"User pressed Back button");
}
}
あなたがやろうとしていることはあまり明確ではありません。リスニングを行っているオブジェクトは何ですか? 画面上にあるものか、ナビゲーション スタックにあるが画面外のものか? UIAlertView の目的は何ですか? ユーザーからの応答が必要ですか? 応答後はどうすればよいですか?
ナビゲーション バー プロパティに KVO を追加する方法があるかもしれませんが、(5.0 以降をターゲットにしている場合) カスタム セグエ クラスを使用する方がよいと思います。カスタム セグエを使用すると、移行プロセス全体を完全にカスタマイズできます。実際の動作を見たい場合は、探している動作の詳細をここにコメントしてください。例を挙げて返信します。
別のオプションは、5.0 以降でも可能な UINavigationController をサブクラス化することですが、ワームの缶を開ける可能性があると思われるため、まだ試していません。
5.0 より前をターゲットにしている場合、カスタマイズされた動作で独自の戻るボタンを使用するのが最善の方法だと思います。