我有一个视图,它使用带有页面卷曲的模态视图来允许输入用户名。然后使用基于Web的服务验证此用户名以查看其是否有效。
一切正常,直到您输入无效的用户名并在模态视图外单击。这仍然会检查用户名,该用户名无效且会打开UIAlertView
。但是,它会返回到父视图。
在这种情况下,有没有办法让模态不被忽略?
我尝试重新加载视图但是它无法正常工作或UIAlertView
阻止它。我的最后一个想法是将警告显示模态视图和警报上的“确定”用于无效的用户名。有人有什么想法吗?
答案 0 :(得分:1)
如果您没有使用UINavigationController
您可以在调用模态视图的视图控制器中放置类似的内容:
-(void)dismissModalViewControllerAnimated:(BOOL)animated{
if (_someFlagForBeingProperlyLoggedIn) [super dismissModalViewControllerAnimated:animated];
}
当您点击页面卷曲时,会向展示/父视图控制器发送dismissModalViewControllerAnimated:
。
由于您使用的是导航控制器,因此您的选项有限。这是因为UINavigationController
是UIViewController
的子类,并且是一个以自我为中心的子类。当你单击页面卷曲时,它的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];
}