[英]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.