你可以停止解雇模态视图吗?

时间:2011-11-29 20:25:53

标签: objective-c ios cocoa-touch modal-view

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

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

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

我尝试重新加载视图但是它无法正常工作或UIAlertView阻止它。我的最后一个想法是将警告显示模态视图和警报上的“确定”用于无效的用户名。有人有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

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

当您点击页面卷曲时,会向展示/父视图控制器发送dismissModalViewControllerAnimated:

由于您使用的是导航控制器,因此您的选项有限。这是因为UINavigationControllerUIViewController的子类,并且是一个以自我为中心的子类。当你单击页面卷曲时,它的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]; 
}

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

答案 1 :(得分: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]; 
}