我在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委托功能中发送凭据。我可以在以后随时发送,但这很奇怪。
答案 0 :(得分:6)
基本上你想要的是在登录对话框完成时将消息从模态UIViewController传递给调用者。有很多方法可以做到这一点。这是一对夫妇:
选项1 - 委托模式:
在你的模态对话框.h
@protocol LoginDelegate
- (void)loginComplete:(NSString *)userId;
- (void)loginFailed;
@end
@interface MyLoginDialog : UIViewController {
UIViewController *delegate;
}
@property (nonatomic, retain) UIViewController *delegate;
在你的模态对话框.m
上 在你的init中:
delegate = nil;
你的dealloc中的:
[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。
如果您想传回登录信息(用户名,userId等),您可以将其打包到字典中并将其添加为"对象"在postNotificationName方法中。
您还需要确保致电
[[NSNotificationCenter defaultCenter] removeObserver:self];
当你完成聆听时。