2012-06-23 62 views
0

如果需要,我想顯示登錄對話框和登錄錯誤對話框。如何製作UIAlertView模態?

我使用UIAlertView來顯示這些對話框,但該過程在顯示UIAlertView時保持運行。

我在下面寫了一段代碼。現在NSUserDefaults不保留這些值,所以我期望登錄對話被顯示,並等待直到按鈕被點擊。

但是,當運行此操作時,會顯示錯誤對話框,並點擊OK後顯示登錄對話框。

我該如何解決這個問題?

在此先感謝。

- (void)storeEvernote 
{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    evID = [defaults stringForKey:@"evID"]; 
    evPW = [defaults stringForKey:@"evPW"]; 
    NSLog(@"%@", evID); 

    if(evID == NULL || evPW == NULL) 
    { 
     login = true; 
     [self showLoginDialogue]; 
    } 
    else 
    { 
     evernoteID = evID; 
     evernotePW = evPW; 
    } 
    if(evernoteID == NULL || evernotePW == NULL) 
    { 
     login = false; 
     [self showErrMessage]; 
     return; 
    } 
    [self getEvernoteNotebooks]; 
} 

- (void)showLoginDialogue 
{ 
    UIAlertView *loginDialogue = [[UIAlertView alloc] initWithTitle:@"Evernote Login"  message:@"Enter your Evernote Info" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"Login", nil]; 
    loginDialogue.delegate = self; 
    loginDialogue.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput; 

    [loginDialogue show]; 
} 

- (void)showErrMessage 
{ 
    UIAlertView *loginalert = [[UIAlertView alloc] initWithTitle:@"Login Failure" message:@"Invalid ID & Password" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
    [loginalert show]; 
} 

回答

0

第一次發現storeEvernote方法運行,evIDevPWNULL所以第一if是真實的,它顯示了LoginDialoge然後它繼續第二if和因爲evernoteIDevernotePW仍然NULL所以在第二條件if聲明也是如此,所以它顯示了errorMessage。爲了解決這個問題,移動第二if聲明委派loginDialogue的方法,還可以添加return;if聲明的結尾,例如:

- (void)storeEvernote 
{ 

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    evID = [defaults stringForKey:@"evID"]; 
    evPW = [defaults stringForKey:@"evPW"]; 
    NSLog(@"%@", evID); 
if(evID == NULL || evPW == NULL) 
{ 
    login = true; 
    [self showLoginDialogue]; 
    return; 
} 
else 
{ 
    evernoteID = evID; 
    evernotePW = evPW; 
} 

[self getEvernoteNotebooks]; 
} 

//The login dialoge delegate method: 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    //Process user input 
     ... 
    if(evernoteID == NULL || evernotePW == NULL) 
    { 
     login = false; 
     [self showErrMessage]; 
     return; 
    } 
    [self getEvernoteNotebooks]; 
} 
+0

宙斯,非常感謝您爲您的示例代碼。 它工作完美,解決了我的問題。 我不知道應用程序在顯示UIAlertView時仍在運行。 –

+0

歡迎您:)請點擊答案左側的複選標記圖標,將其標記爲正確答案。 –