1

我有一个导航控制器堆栈,其中包含不同的可能控制器。iOS:关闭视图控制器并推送新视图而不显示导航堆栈中的当前视图

我希望根据我推入导航控制器的下一个视图,根据需要呈现视图控制器。 (你能想到的,作为用户登录验证移动到下一个屏幕前screen..which验证用户。)

我能够与

UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(contactPicker, animated: true, completion: nil) 

成功地做到这一点,并关闭它,当我需要解雇与

UIApplication.sharedApplication().keyWindow?.rootViewController?.dismissViewControllerAnimated(false, completion: { 
     self.navigationController.pushViewController(myNewVC, animated: true) 
    }) 

我能够从模态呈现的观点做然而过渡到下一个视图我(myNewvC)新推的不正是我希望它是。当视图解散发生时,我可以看到我的呼叫者屏幕一秒钟,然后移动到下一个视图。我不想看到那个屏幕。可能吗?

(另外我不想在导航堆栈中添加验证屏幕,因为该屏幕的目的不是导航堆栈的一部分)。

+0

您可以隐藏通过设置其Alpha为0 –

回答

0

苹果公司完全在这里添加完成块,以防止未捕获的异常,因为你想要做的可能会导致一个,因为你不能同时做两个动画,也许一些建议的解决方案:

尝试呈现新的控制器,然后在完成时隐藏前一个控制器(这种方式当用户解散新的控制器时,他不会看到前一个控制器),例如 假设你在VC1一个现在要取消它,并显示VC2,你可以在Objective-C

[self presentViewController:VC2 animated:YES completion:^{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
}]; 

使用下面的代码在迅速

self.presentViewController(VC2, animated: true) {() -> Void in 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 

或者,你可以忽略它如果用户不会放弃新控制器,那么他将永远不会看到旧控制器,但我不认为这是内存有效的,因为控制器会卡在内存中。

+0

可以请你解释一下第一个建议您的基本看法?无法理解它。 – Dovakin

+0

我会编辑我的答案来解释它更多 –

+0

那么我的问题是与导航控制器的上下文。我正在介绍导航控制器的模态视图。所以基本dismissViewController目前完成将无法正常工作。 – Dovakin

0

我没有自己尝试过,但是如果你使用UINavigationViewController,并且你不想返回那个ViewController,那么你可以简单地从堆栈中移除,然后再进入下一个ViewController。 在这里你可以看到你是如何改变UINavigationViewController的视图控制器阵列: Removing viewcontrollers from navigation stack

+0

我的问题是在我解雇presentViewController的时候,导航堆栈中的当前控制器在我转移到下一个之前显示。我知道我可以设置控制器阵列在你的链接中提到..但它不能解决我的问题。 – Dovakin

相关问题