2013-10-06 70 views
1

我需要在用戶離開特定視圖之前顯示UIAlertView,方法是點按「後退」導航欄按鈕或點擊標籤欄中的某個選項卡項目有,爲了要求他確認。這將是一個雙鍵警報,一個'取消'一個留在視圖中,一個'接受'一個離開。我需要這樣做,因爲我必須讓用戶意識到如果離開,未保存的更改將會丟失。在離開iOS視圖之前詢問用戶確認

我試圖通過創建並顯示在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]; 
} 

但有一種觀點是流行無論如何,由於其代表的是警報視圖後和應用程序崩潰顯示已經從導航堆棧彈出的視圖控制器...我沒有找到解決這種情況的方法,任何人都可以幫助我嗎?

謝謝!

+1

您需要自定義所有按鈕並自行處理操作(或者在其上添加透明視圖以阻止觸摸並處理觸摸等)。 – Wain

回答

2

當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]; 

或者,如果用戶取消無能爲力

+0

這對我不起作用,因爲我必須在視圖控制器中定義後退按鈕,以便在需要顯示警報的位置按下後退按鈕,因爲我必須自定義此後退按鈕的標籤... – AppsDev

+0

我不dont理解,你不能定製它,或者你可以? –

+0

是的,我實際上在父視圖控制器中創建了一個'UIBarButtonItem',並將其設置爲視圖控制器的後退按鈕,在推動它之前需要警報...我不知道我是否正確地解釋自己 – AppsDev

1

我會被誘惑打動你要保護成模態視圖控制器的數據操作和處理您選擇有駁回任何行動驗證模態演示。對我來說,這就是模態的一點:在與應用程序的其他部分進行交互之前必須先完成的事情。

相關問題