如何制作UIAlertView模式?

时间:2012-06-23 03:44:21

标签: ipad ios5 objective-c-2.0

如果需要,我想显示登录对话和登录错误对话。

我使用UIAlertView来显示这些对话,但是在显示UIAlertView时,该过程一直在运行。

我在下面写了一段代码。现在NSUserDefaults没有保留这些值,所以我预计会显示登录对话框并等到按钮被点击。

但是在运行时,会显示错误对话框,点击“确定”后会显示“登录”对话框。

我该如何解决这个问题?

提前致谢。

- (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];
}

1 个答案:

答案 0 :(得分:0)

第一次storeEvernote方法运行时,evIDevPWNULL,因此第一个if为真,它会显示LoginDialoge然后它继续第二个if,因为evernoteIDevernotePW仍然是NULL所以第二个if语句中的条件也是如此,所以它显示了errorMessage。要解决此问题,请将第二个if语句移至loginDialogue ALSO ADD 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];
}