在我的ios应用中,我可以说我有三个ViewControllers
:A
,B
和C
。
来自A
我出示B
并指定A
作为代表。在B
上执行操作后,我希望从B
中解除C
并显示A
。但是,我希望在屏幕上根本不显示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显示一点(在调用dismiss之后)。我该怎么做才能避免这种情况?
答案 0 :(得分:2)
如果您使用它进行登录,那么您应该尝试不同的方法。我的意思是如果A是你的rootViewController(使其成为登录视图控制器),它检查用户是否有会话。假设用户有一个会话然后使用[[[[UIApplication sharedApplication] delegate] window]setRootViewController:]
使你的C viewController成为rootViewController,如果他没有会话显示他同一页面(一个viewController),则不需要B.只是尝试它可能会改善你的应用程序性能。
答案 1 :(得分:-1)
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];
}