我有一個視圖,使用頁面捲曲的模態視圖,以允許輸入用戶名。這個用戶名然後通過基於網絡的服務進行驗證,看看它是否有效。你可以停止解除模態視圖嗎?
一切都很好,直到您輸入無效的用戶名並在模態視圖之外單擊。這仍檢查用戶名,該用戶名被報告無效,並打開UIAlertView
。但是,它回到父視圖。
有沒有什麼辦法讓模態在這種情況下不能解僱?
我試圖重新加載視圖,但無論它不工作或UIAlertView
阻止它。我擁有的最後一個想法是在警報中顯示模式視圖和無效用戶名的「確定」。有人有主意嗎?
我有一個視圖,使用頁面捲曲的模態視圖,以允許輸入用戶名。這個用戶名然後通過基於網絡的服務進行驗證,看看它是否有效。你可以停止解除模態視圖嗎?
一切都很好,直到您輸入無效的用戶名並在模態視圖之外單擊。這仍檢查用戶名,該用戶名被報告無效,並打開UIAlertView
。但是,它回到父視圖。
有沒有什麼辦法讓模態在這種情況下不能解僱?
我試圖重新加載視圖,但無論它不工作或UIAlertView
阻止它。我擁有的最後一個想法是在警報中顯示模式視圖和無效用戶名的「確定」。有人有主意嗎?
如果你不使用UINavigationController
你可以把這樣的事情在調用模態視圖的視圖控制器:
-(void)dismissModalViewControllerAnimated:(BOOL)animated{
if (_someFlagForBeingProperlyLoggedIn) [super dismissModalViewControllerAnimated:animated];
}
當您點擊捲曲的呈現/父視圖控制器在頁面上發送dismissModalViewControllerAnimated:
。
由於您使用的是導航控制器,因此您的選項有限。這是因爲UINavigationController
是UIViewController
的一個子類,並且以此爲中心。當你點擊頁面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];
}
然後,當警報視圖被駁回,它會顯示「登錄」視圖。
我試着用一個簡單的NSLog調用該函數,但是當模態視圖關閉時它甚至沒有命中。我喜歡你設定旗幟的想法。這樣一旦模態視圖關閉,我可以檢查父視圖的viewDidAppear中的那個標誌。不知道爲什麼這個函數沒有被調用。謝謝你的想法。 – Mike
當你點擊頁面curl時,我們稱它爲login view controller,它在呈現/父視圖控制器上調用'dismissModalViewControllerAnimated:'而不是在登錄視圖控制器上。 – NJones
正確。我添加到呈現視圖控制器,然後在那裏放置一個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.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];
}
在模態視圖上方顯示警報應該沒有問題。爲什麼你的模態視圖在視圖外部被輕視? – Ariel
點擊超出父視圖上的模式,這會消除模態。解僱觸發顯示UIAlert的用戶名檢查。這一切都很好,除非他們輸入一個無效的用戶名,然後模式關閉,警報顯示,但我希望它重新回到模態視圖。這看起來應該很簡單,但是我花了很多時間,而這對我來說並不合適。 – Mike