我有一个视图,它使用带有页面卷曲的模式视图来允许输入用户名。然后使用基于 Web 的服务验证此用户名,以查看其是否有效。
一切正常,直到您输入无效的用户名并在模式视图之外单击。这仍然会检查用户名,该用户名被报告为无效并UIAlertView
打开。但是,它会返回到父视图。
在这种情况下,有没有办法让模态不被解雇?
我试图重新加载视图,但它要么不起作用,要么UIAlertView
被阻止。我的最后一个想法是将模式视图与无效用户名警报上的“确定”结合起来。有人有想法么?
我有一个视图,它使用带有页面卷曲的模式视图来允许输入用户名。然后使用基于 Web 的服务验证此用户名,以查看其是否有效。
一切正常,直到您输入无效的用户名并在模式视图之外单击。这仍然会检查用户名,该用户名被报告为无效并UIAlertView
打开。但是,它会返回到父视图。
在这种情况下,有没有办法让模态不被解雇?
我试图重新加载视图,但它要么不起作用,要么UIAlertView
被阻止。我的最后一个想法是将模式视图与无效用户名警报上的“确定”结合起来。有人有想法么?
如果您不使用 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];
}
然后,当警报视图被解除时,它将显示“登录”视图。
您应该稍微延迟重新显示模态视图,大约 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];
}