Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ios在关闭前一个视图控制器后立即显示视图控制器_Ios_Object_Presentviewcontroller - Fatal编程技术网

ios在关闭前一个视图控制器后立即显示视图控制器

ios在关闭前一个视图控制器后立即显示视图控制器,ios,object,presentviewcontroller,Ios,Object,Presentviewcontroller,在我的ios应用程序中,假设我有三个ViewController:A、B和C 从A开始,我呈现B,并指定A作为代表。在B上完成一个操作后,我想关闭B并从A中显示C。然而,我想在屏幕上根本不显示A的情况下执行此操作。这是我现在的代码,在类A中: 然后这是A中的委托函数,B在执行操作时调用该函数: - (void) actionPerformed { [self dismissViewControllerAnimated:YES completion:^{ C *vc = [self

在我的ios应用程序中,假设我有三个ViewController:A、B和C

从A开始,我呈现B,并指定A作为代表。在B上完成一个操作后,我想关闭B并从A中显示C。然而,我想在屏幕上根本不显示A的情况下执行此操作。这是我现在的代码,在类A中:

然后这是A中的委托函数,B在执行操作时调用该函数:

- (void) actionPerformed
{
    [self dismissViewControllerAnimated:YES completion:^{
    C *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"C"];
    [self presentViewController:vc animated:NO completion:nil];
}];
然而,这会导致在调用dismise后,C显示一段时间,即使我将呈现代码放入dismise的完成处理程序中。我能做些什么来避免这种情况

You can manage this by timeinterval
like This way
您可能会首先错过该视图 [自责]

-(void)dismiss
{
    [self dismissViewControllerAnimated:YES completion:nil];
    [self performSelector:@selector(present) withObject:nil afterDelay:2.0];
}
-(void)present
{
    C *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"C"];
    [self presentViewController:vc animated:NO completion:nil];
}

如果您使用它作为登录方法,那么您应该尝试另一种方法。我的意思是,如果A是您的根视图控制器,则将其作为登录视图控制器,以检查用户是否有会话。假设用户有一个会话,然后使用[[[UIApplication sharedApplication]委派]窗口]setRootViewController:]将您的C viewController设置为rootViewController如果他没有会话,则向他显示相同的页面a viewController,不需要B。试试看,这可能会提高你的应用程序性能。

Bro根据我的说法,最好的方法是将你的B和C添加为a的子视图控制器,而不是以模式显示它们。如果你愿意,我可以给你代码。我使用这个机制来处理登录-所以A是根视图控制器,它检查用户是否登录。如果没有,它将显示登录视图控制器B。一旦用户登录,它将显示C.@iDeveloper显示您的代码,并让您了解处理ChildViewController的含义,以及在不显示viewcontroller@NarasimhaiahKolli您可以使用在两个childViewController之间进行转换[自转换从ViewController:到ViewController:持续时间:选项:动画:完成:]方法。我希望你得到了bro。@iDeveloper谢谢你。它帮助很大。由于遗留代码,我仍然有三个视图控制器更容易。但是我修改了操作代码,将C设置为根视图,这确保没有延迟
-(void)dismiss
{
    [self dismissViewControllerAnimated:YES completion:nil];
    [self performSelector:@selector(present) withObject:nil afterDelay:2.0];
}
-(void)present
{
    C *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"C"];
    [self presentViewController:vc animated:NO completion:nil];
}