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

Posted

技术标签:

【中文标题】ios 在关闭前一个视图控制器后立即显示视图控制器【英文标题】:ios present view controller immediately after dismissing a previous one 【发布时间】:2014-10-15 11:26:48 【问题描述】:

在我的 ios 应用中,假设我有三个 ViewControllersABC

来自A 我提出B 并指定A 作为代表。在B 上完成操作后,我想关闭B 并从A 呈现C。但是,我想在屏幕上完全不显示A 的情况下执行此操作。这是我现在的代码,在类A

-(void)viewDidAppear:(BOOL)animated

    [super viewDidAppear:animated];

    B *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"B-identifier"];
    vc.delegate = self;
    [self presentViewController:vc animated:NO completion:^];


那么这是 A 内部的委托函数,B 在执行操作时调用:

- (void) actionPerformed

    [self dismissViewControllerAnimated:YES completion:^
    C *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"C"];
    [self presentViewController:vc animated:NO completion:nil];
];

然而,这会导致 C 出现一段时间(在调用解除之后),即使我将呈现代码放在解除的完成处理程序中。我能做些什么来避免这种情况?

【问题讨论】:

兄弟,根据我的说法,最好的方法是将 B 和 C 添加为 A 的子视图控制器,而不是模态显示它们。如果你愿意,我可以给你代码。 我正在使用这种机制来处理登录——所以 A 是根视图控制器,它检查用户是否登录。如果没有,它会显示登录视图(视图控制器 B)。一旦用户登录,它就会显示 C. @iDeveloper 显示您的代码,让您了解处理 childviewcontroller 的含义以及您如何在不显示视图控制器的情况下做到这一点 @NarasimhaiahKolli 您可以在父类中使用 [self transitionFromViewController: toViewController: duration: options: animations: completion:] 方法在两个 childViewController 之间进行转换。我希望你得到我兄弟。 @iDeveloper 谢谢你.. 很有帮助。 【参考方案1】:

如果您将其用于登录方法,那么您应该尝试不同的方法。我的意思是如果 A 是您的 rootViewController(使其成为登录视图控制器),它会检查用户是否有会话。假设用户有一个会话,然后使用[[[[UIApplication sharedApplication] delegate] window]setRootViewController:] 将您的 C viewController 设置为 rootViewController,如果他没有会话,则向他显示相同的页面(A viewController),则不需要 B。试一试可能会改善您的应用程序性能。

【讨论】:

由于遗留代码,我更容易仍然拥有三个视图控制器。但是我修改了操作代码以将 C 设置为根视图,这样可以确保没有延迟【参考方案2】:
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];

【讨论】:

以上是关于ios 在关闭前一个视图控制器后立即显示视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8 – 在设置关键窗口或关闭并立即呈现另一个视图控制器后快速呈现视图控制器时出现故障

在 iOS 上,为啥在当前视图控制器之后立即关闭视图控制器不起作用?

视图控制器不会立即关闭并呈现新的视图控制器

显示模态视图 - IOS

IOS/Autolayout:在显示的控制器关闭后更改为显示视图

在没有动画的情况下关闭视图控制器后立即呈现视图控制器