誰かが私のiOSアプリの「戻る」ボタンを押したときにポップアップを追加して、本当に戻ってきたいかどうかをユーザーに尋ねたいと思います。次に、ユーザーの応答に応じて、アクションを元に戻したり続行したりします。ビューのviewWillDisappear関数にコードを追加して適切なデリゲートを書き込もうとしましたが、常にビューを変更してポップアップを表示するため、機能しません。私のコードは:
-(void) viewWillDisappear:(BOOL)animated {
_animated = animated;
if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) {
UIAlertView *alert_undo = [[UIAlertView alloc] initWithTitle:@"UIAlertView"
message:@"You could be loosing information with this action. Do you want to proceed?"
delegate:self
cancelButtonTitle:@"Go back"
otherButtonTitles:@"Yes", nil];
[alert_undo show];
}
else [super viewWillDisappear:animated];
}
デリゲートの実装は次のとおりです。
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
if([title isEqualToString:@"Yes"])
{
[super viewWillDisappear:_animated];
}
}
これはまったく機能していません。誰かが今それを行うためのより良い方法または何が間違っている可能性がありますか?
どうもありがとうございました、
回答ありがとうございます、@ staticVoidMan!最後に、いくつかの変更を加えてコードを使用しました。戻るボタンは変更できないため、追加のボタンを作成して標準のボタンを非表示にする必要があります。唯一の問題は、新しい「戻る」ボタンのスタイルで、これは標準のものとは異なります。最終的なコードは次のとおりです。
- (void)viewDidLoad
{
self.navigationItem.hidesBackButton = YES;
UIBarButtonItem *bbtnBack = [[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(goBack:)];
self.navigationItem.leftBarButtonItem = bbtnBack;
}
- (void)goBack:(UIBarButtonItem *)sender
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert"
message:@"...Do you want to proceed?"
delegate:self
cancelButtonTitle:@"No"
otherButtonTitles:@"Yes", nil];
[alert show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
switch(buttonIndex) {
case 0: //"No" pressed
//do something?
break;
case 1: //"Yes" pressed
//here you pop the viewController
[self.navigationController popViewControllerAnimated:YES];
break;
}
}
一度-viewWillDisappear:
が呼び出されました。あなたのviewController
が消えることを止めることはできません。
理想的には、navigationBar
の戻るボタンをオーバーライドし、そのメソッドでアラートを表示する必要があります(残りはほとんど同じです)
- (void)viewDidLoad
{
//...
UIBarButtonItem *bbtnBack = [[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(goBack:)];
[self.navigationItem setBackBarButtonItem: bbtnBack];
}
- (void)goBack:(UIBarButtonItem *)sender
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert"
message:@"...Do you want to proceed?"
delegate:self
cancelButtonTitle:@"No"
otherButtonTitles:@"Yes", nil];
[alert show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
switch(buttonIndex) {
case 0: //"No" pressed
//do something?
break;
case 1: //"Yes" pressed
//here you pop the viewController
[self.navigationController popViewControllerAnimated:YES];
break;
}
}
[〜#〜] note [〜#〜]:宣言することを忘れないでください<UIAlertViewDelegate>
。hこのviewController
ファイル内