0

我正在使用 QuickDialog 推送登录表单。一切都在工作,除了视图控制器不能被解雇。像这样的代码:

- (void)onLogin:(QButtonElement *)buttonElement
{
    [self loading:YES];
    Info *info = [[Info alloc] init];
    [self.root fetchValueUsingBindingsIntoObject:info];
    [self.client loginWithUsername:info.login password:info.password onSuccess:^(NSDictionary *result) {
        NSLog(@"user signed in");
        [self loading:NO];
        [self dismissViewControllerAnimated:YES completion:nil];
    } onFailure:^(NSError *error) {
        NSLog(@"login error");
    }];
}

我正在使用这些代码来推送这个视图控制器

QRootElement *root = [[QRootElement alloc] initWithJSONFile:@"loginform"];
LoginController *loginController = (LoginController *)[QuickDialogController controllerForRoot:root];
[self.navigationController pushViewController:loginController animated:YES];
4

1 回答 1

2

我很想告诉你这样做:

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];

这是苹果的文档:

呈现视图控制器负责关闭它呈现的视图控制器。但是,如果您在呈现的视图控制器本身上调用此方法,它会自动将消息转发到呈现的视图控制器。

我不确定为什么您的电话不是“转发”并关闭。也许您使用presentModalViewController? 如果是这种情况,请平衡一下dismissModalViewControllerAnimated,这可能会解决。

当然,我们都假设您的其余代码是正确的,并且您实际上NSLog(@"user signed in");在登录时看到了打印。

祝你好运!

>> 更新 <<

哇,对不起。我刚刚注意到您写了“QuickDialog to push a login form”,并看到您添加了一个如何呈现此屏幕的示例。由于您将其推送到导航控制器堆栈上,因此您需要将其弹出。这将解决问题:

[self.navigationController popViewControllerAnimated:YES];

享受。

于 2013-01-26T14:37:40.280 回答