1

我有一个视图,它使用带有页面卷曲的模式视图来允许输入用户名。然后使用基于 Web 的服务验证此用户名,以查看其是否有效。

一切正常,直到您输入无效的用户名并在模式视图之外单击。这仍然会检查用户名,该用户名被报告为无效并UIAlertView打开。但是,它会返回到父视图。

在这种情况下,有没有办法让模态不被解雇?

我试图重新加载视图,但它要么不起作用,要么UIAlertView被阻止。我的最后一个想法是将模式视图与无效用户名警报上的“确定”结合起来。有人有想法么?

4

2 回答 2

1

如果您不使用 aUINavigationController您可以在调用模态视图的视图控制器中放置类似的内容:

-(void)dismissModalViewControllerAnimated:(BOOL)animated{
    if (_someFlagForBeingProperlyLoggedIn) [super dismissModalViewControllerAnimated:animated];
}

当您点击页面 curl 时,将发送呈现/父视图控制器dismissModalViewControllerAnimated:

由于您使用的是导航控制器,因此您的选择是有限的。这是因为UINavigationController它是 的一个子类UIViewController,并且是一个以自我为中心的子类。当您单击页面 curl 时,它正在调用 dismissModalViewControllerAnimated:。

您仍然可以选择子类化UINavigationController和实现上述方法,但这会很快变得混乱。

让 UIAlertView “直接返回”到模式登录视图非常容易。让该主视图符合UIAlertViewDelegate协议。当您显示警报时将该实例设置为委托,并在该类中实现该方法:

-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{
    // Enclose in if (buttonIndex == #) for selective calling
    UINavigationController* nav = (UINavigationController*)[[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"Preferences"];
    [nav setModalTransitionStyle:UIModalTransitionStylePartialCurl];
    [self.navigationController presentModalViewController:nav animated:YES]; 
}

然后,当警报视图被解除时,它将显示“登录”视图。

于 2011-11-29T20:55:52.447 回答
0

您应该稍微延迟重新显示模态视图,大约 0.3-0.5。这是解除警报所需的时间,这正是阻止模式视图显示的动画(解除警报视图)。

-(void)showModal{
    SomeModalViewClass* modalView = [[SomaModalViewClass alloc]init];
    [self setModalTransitionStyle:UIModalTransitionStylePartialCurl];
    [self presentModalViewController:modalView animated:YES];
    [modalView release];
}

-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{
    //check the button index if needed and then
    [self performSelector:@selector(showModal) withObject:nil afterDelay:0.3]; 
}
于 2011-11-30T06:50:56.537 回答