2013-03-13 72 views
2

我想从uialertview获取用户名和密码并传递给willSendRequestForAuthenticationChallenge。这些是我的代码。从UIAlertview获取用户名和密码以用于willSendRequestForAuthenticationChallenge xcode

- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
{ 
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Login" 
                message:nil 
                delegate:self 
              cancelButtonTitle:@"Cancel" 
              otherButtonTitles:@"OK",@"Auto", nil]; 

alertView.transform=CGAffineTransformMakeScale(1.0, 0.75); 
alertView.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput; 
[alertView show]; 


if ([challenge previousFailureCount] == 0) 
    { 
     NSLog(@"Inside challenge previousFailureCount==0"); 
     NSURLCredential *credentail = [NSURLCredential 
             credentialWithUser:Username 
             password:Password 
             persistence:NSURLCredentialPersistenceNone]; 


     [[challenge sender] useCredential:credentail forAuthenticationChallenge:challenge]; 
    } 
} 
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
//Index1 = OK 
//Index2 = Auto 
//Index0 = Cancel 

NSLog(@"Alert View dismissed with button at index %d",buttonIndex); 

if(buttonIndex==1) 
{ 
    NSURLAuthenticationChallenge *challenge; 
    Username= [alertView textFieldAtIndex:0].text; 

    Password= [alertView textFieldAtIndex:1].text; 

} 
} 


的问题是我无法从UIAlertView中调用用户名和密码pass.If我写上面的代码,用户写入的用户名和密码之前,它会做的挑战。我们必须等到用户按OK。而且,如果我在didDismissWithButtonIndex中挑战,我也会遇到错误。 我想知道如何做。请帮助我。

回答

0

while click on alertView button it dismiss alertView .Better take on more alertView and pass your value there。

如果这不是塞纳里奥,我会建议请详细说明你真正想要的。

+0

感谢兄弟。我找到了一个办法。 – 2013-03-13 06:45:33

0

哦....我想我找到了一个办法。我可以回想起willSendRequestForAuthenticationChallenge.So,首先,UIalertview将显示。我们将保存用户名和密码。然后,我们回想一下willSendRequestForAuthenticationChallenge并传递用户名和密码。

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
    //Index1 = OK 
    //Index2 = Auto 
    //Index0 = Cancel 
    checkUserPw=TRUE; 
    checkTochangeUIalert=FALSE; 
    NSLog(@"Alert View dismissed with button at index %d",buttonIndex); 

    if(buttonIndex==1) 
    { 
     checkManualAuthentication=TRUE; 
     NSLog(@"User clicks OK"); 
     self.UserName = [alertView textFieldAtIndex:0].text; 

     self.Password = [alertView textFieldAtIndex:1].text; 

     connection_for_auto = [[NSURLConnection alloc] initWithRequest: [NSURLRequest requestWithURL:toRedirectURL] delegate:self]; 

     [connection_for_auto start]; 

    } 
} 


- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
{ 

if(!checkUserPw){ 
    //so that alert will display only once. 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Login" 
                message:nil 
                delegate:self 
              cancelButtonTitle:@"Cancel" 
              otherButtonTitles:@"OK",@"Auto", nil]; 

    alertView.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput; 
    [alertView show]; 
    } 
    else 
    { 
     NSURLCredential *credentail =nil; 
     credentail = [NSURLCredential 
             credentialWithUser:self.UserName 
             password:self.Password 
             persistence:NSURLCredentialPersistenceNone]; 
    [[challenge sender] useCredential:credentail forAuthenticationChallenge:challenge]; 
    } 
}