2011-11-29 77 views
1

我有一個視圖,使用頁面捲曲的模態視圖,以允許輸入用戶名。這個用戶名然後通過基於網絡的服務進行驗證,看看它是否有效。你可以停止解除模態視圖嗎?

一切都很好,直到您輸入無效的用戶名並在模態視圖之外單擊。這仍檢查用戶名,該用戶名被報告無效,並打開UIAlertView。但是,它回到父視圖。

有沒有什麼辦法讓模態在這種情況下不能解僱?

我試圖重新加載視圖,但無論它不工作或UIAlertView阻止它。我擁有的最後一個想法是在警報中顯示模式視圖和無效用戶名的「確定」。有人有主意嗎?

+0

在模態視圖上方顯示警報應該沒有問題。爲什麼你的模態視圖在視圖外部被輕視? – Ariel

+0

點擊超出父視圖上的模式,這會消除模態。解僱觸發顯示UIAlert的用戶名檢查。這一切都很好,除非他們輸入一個無效的用戶名,然後模式關閉,警報顯示,但我希望它重新回到模態視圖。這看起來應該很簡單,但是我花了很多時間,而這對我來說並不合適。 – Mike

回答

1

如果你不使用UINavigationController你可以把這樣的事情在調用模態視圖的視圖控制器:

-(void)dismissModalViewControllerAnimated:(BOOL)animated{ 
    if (_someFlagForBeingProperlyLoggedIn) [super dismissModalViewControllerAnimated:animated]; 
} 

當您點擊捲曲的呈現/父視圖控制器在頁面上發送dismissModalViewControllerAnimated:

由於您使用的是導航控制器,因此您的選項有限。這是因爲UINavigationControllerUIViewController的一個子類,並且以此爲中心。當你點擊頁面curl時,它會調用dismissModalViewControllerAnimated:。

您仍然可以選擇子類別UINavigationController並執行上述方法,但這會很匆忙。

將UIAlertView「直接返回」到模態登錄視圖非常容易。該主視圖符合UIAlertViewDelegate協議。當您顯示警報設置實例作爲代表,並在這個類實現方法:

-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{ 
    // Enclose in if (buttonIndex == #) for selective calling 
    UINavigationController* nav = (UINavigationController*)[[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"Preferences"]; 
    [nav setModalTransitionStyle:UIModalTransitionStylePartialCurl]; 
    [self.navigationController presentModalViewController:nav animated:YES]; 
} 

然後,當警報視圖被駁回,它會顯示「登錄」視圖。

+0

我試着用一個簡單的NSLog調用該函數,但是當模態視圖關閉時它甚至沒有命中。我喜歡你設定旗幟的想法。這樣一旦模態視圖關閉,我可以檢查父視圖的viewDidAppear中的那個標誌。不知道爲什麼這個函數沒有被調用。謝謝你的想法。 – Mike

+0

當你點擊頁面curl時,我們稱它爲login view controller,它在呈現/父視圖控制器上調用'dismissModalViewControllerAnimated:'而不是在登錄視圖控制器上。 – NJones

+0

正確。我添加到呈現視圖控制器,然後在那裏放置一個NSLog(@「Dismissing Modal」);它在調試器中從不出現。這是調用模態的代碼。我們可以使用UINavigationController * nav =(UINavigationController *)[[UIStoryboard storyboardWithName:@「MainStoryboard_iPhone」bundle:nil] instantiateViewControllerWithIdentifier:@「Preferences」]; [nav setModalTransitionStyle:UIModalTransitionStylePartialCurl]; [self.navigationController presentModalViewController:nav animated:YES]; – Mike

0

你應該稍微延遲一下,重新顯示你的模態視圖,約0.3-0.5。這是需要提醒被解散的時間量,這正是阻止模態視圖顯示的動畫(解除警報視圖)。

-(void)showModal{ 
    SomeModalViewClass* modalView = [[SomaModalViewClass alloc]init]; 
    [self setModalTransitionStyle:UIModalTransitionStylePartialCurl]; 
    [self presentModalViewController:modalView animated:YES]; 
    [modalView release]; 
} 

-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{ 
    //check the button index if needed and then 
    [self performSelector:@selector(showModal) withObject:nil afterDelay:0.3]; 
} 
相關問題