簡體   English   中英

在iOS中離開視圖之前要求用戶確認

[英]Asking for user confirmation before leaving a view in iOS

我需要在用戶離開某個視圖之前顯示UIAlertView ,方法是點擊“后退”導航欄按鈕或點擊我所擁有的標簽欄中的一個標簽項,以便讓他確認。 這將是一個雙按鈕警報,一個“取消”一個留在視圖中,一個“接受”一個離開。 我需要這樣做,因為我必須讓用戶意識到如果離開,未保存的更改將會丟失。

我嘗試通過在viewWillDisappear:方法中創建和顯示警報視圖來執行此操作:

- (void)viewWillDisappear:(BOOL)animated
{

   UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Exit", @"")
                                                    message:NSLocalizedString(@"Are you sure you want to leave? Changes will be discarded", @"")
                                                   delegate:self
                                          cancelButtonTitle:NSLocalizedString(@"Cancel", @"")
                                          otherButtonTitles:NSLocalizedString(@"Accept", @""), nil];

   [alertView show];

   [super viewWillDisappear:animated];
}

但是視圖仍然是彈出的,並且警報視圖顯示在那之后,應用程序崩潰,因為它的委托是已經從導航堆棧中彈出的視圖控制器......我找不到解決這種情況的方法,可以有人幫幫我嗎?

謝謝!

當viewWillDissapear不起作用時顯示警報視圖,因為視圖已經消失,它正在被刪除的路上。

你可以做的是,當按下后退按鈕時自己添加一個自定義動作,然后你決定按下后退按鈕時該怎么做,你可以顯示警報視圖,然后在其中一個按鈕中解除視圖,像這樣:

- (id)init {
    if (self = [super init]) {
    self.navigationItem.backBarButtonItem.target = self;
    self.navigationItem.backBarButtonItem.action = @selector(backButtonPressed:);
  }
    return self;
}

然后在按下后退按鈕時顯示警報視圖:

-(void)backButtonPressed:(id)sender
 {
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Exit", @"") message:NSLocalizedString(@"Are you sure you want to leave? Changes will be discarded", @"") delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", @"") otherButtonTitles:NSLocalizedString(@"Accept", @""), nil];      
    [alertView show];           
}

現在,當按下警報視圖中的確認按鈕時,只需調用:

[self.navigationController popViewControllerAnimated:YES];

如果用戶取消,則不執行任何操作

我很想將您想要保護的數據操作移動到模態視圖控制器中,並處理您選擇忽略模態演示的任何操作的驗證。 對我而言,這是模態的重點:在與應用程序的其余部分交互之前必須完成的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM