如何等到模态对话框在ios中返回结果

时间:2012-05-06 13:33:19

标签: objective-c ios

我在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委托功能中发送凭据。我可以在以后随时发送,但这很奇怪。

1 个答案:

答案 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];  

当你完成聆听时。