1

我在 http 基本身份验证委托中UIViewController显示了一个自定义presentModalViewController功能,以获取用户名和密码。我想等到用户单击屏幕上显示的模态视图控制器上的登录按钮。我怎样才能做到这一点?我是 iOS 新手,任何评论或链接将不胜感激。

编辑:这是里面的示例代码NSURLConnectionDelegate

-(void) connection(NSURLConnection*)connection willSendRequestForAuthenticationChallenge(NSURLAuthenticationChallenge*)challenge
{
    CustomAuthViewController *authView = [CustomAuthViewController alloc] initWithNibName"@"CustomAuthViewController" bundle:[NSBundle mainBundle]];
    [parentcontroller presentModalViewController:authView animated:YES];
    // 
    // I want to wait here somehow till the user enters the username/password
    //
    [[challenge sender] userCredentials:credentials forAuthenticationChallenge:challenge];
}

亲切的问候。

编辑:解决方案:没有必要立即在 willSendRequestForAuthenticationChallenge 委托函数中发送凭据。我可以稍后随时发送,但很奇怪。

4

1 回答 1

6

基本上,您想要的是在登录对话框完成时将消息从模态 UIViewController 传递给调用者。有很多方法可以做到这一点。这是一对:

选项 1 - 代表模式:

在您的模态对话框 .h

@protocol LoginDelegate
- (void)loginComplete:(NSString *)userId;
- (void)loginFailed;
@end

@interface MyLoginDialog : UIViewController {
    UIViewController *delegate;
}

@property (nonatomic, retain) UIViewController *delegate;

在您的模态对话框 .m

在你的初始化:

delegate = nil;

在你的交易中:

[delegate release];

当您完成登录时:

[delegate dismissModalViewControllerAnimated:YES]; 
[delegate loginComplete:userId] or [delegate loginFailed];

然后在调用视图控制器上实现 LoginDelegate 协议。

当您创建登录视图控制器时,设置委托:

UIViewController *viewLogin = [[UIViewController alloc] init];
viewLogin.delegate = self;

选项 2 - 使用 NSNotificationCenter 发布通知:

在您的登录对话框中:

[self dismissModalViewControllerAnimated:YES];
[[NSNotificationCenter defaultCenter] postNotificationName:@"LoginComplete" object:nil];

在您的调用视图控制器上

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loginComplete:) name:@"LoginComplete" object:nil];

然后实现选择器 loginComplete。

如果您想传回登录信息(用户名、用户 ID 等),您可以将其打包到字典中并将其添加为 postNotificationName 方法中的“对象”。

您还需要确保致电

[[NSNotificationCenter defaultCenter] removeObserver:self];  

当你听完。

于 2012-05-06T13:49:33.713 回答