Ios 关闭并显示同一视图控制器

Ios 关闭并显示同一视图控制器,ios,uiviewcontroller,Ios,Uiviewcontroller,我有一个视图控制器,我需要关闭它,并在同一时间将其显示回来。 我曾尝试关闭它并回调视图控制器,但没有工作 [self dismissViewControllerAnimated:YES completion:nil]; UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"Main" bundle:nil]; ExpandViewController *expandView= [storyboard instantiate

我有一个视图控制器,我需要关闭它,并在同一时间将其显示回来。 我曾尝试关闭它并回调视图控制器,但没有工作

[self dismissViewControllerAnimated:YES completion:nil];
UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"Main" bundle:nil];
ExpandViewController *expandView=
    [storyboard instantiateViewControllerWithIdentifier:@"ExpandViewController"];
expandView.delegate=self;
[expandView setEventDict:dict];
[self presentViewController:expandView animated:YES completion:NULL];

在当前显示的视图控制器被解除之前,不能显示视图控制器。在调用您解雇的
完成处理程序之前,您不会知道发生了这种情况。您的错误是
完成
处理程序是
nil
。相反,提供一个
完成
处理程序(在第一行中),由代码的其余行组成。因此,他们将在解雇结束后执行

[self dismissViewControllerAnimated:YES completion:^{
    // ... the rest of your code goes in here ...
}];

我不确定您在问题中想要的结果/功能,但@matt是正确的。然而,您可能希望无缝地实现这一点。因此,您可以使用子视图控制器,而不是使用
[self-presentViewController:VC-animated:animate completion:nil]
方法显示视图控制器

添加子vc:

[self addChildViewController:myVC];
[self.view addSubview:myVC.view];
[myVC didMoveToParentViewController:self];
[myVC willMoveToParentViewController:nil];
... remove subview.
删除子vc:

[self addChildViewController:myVC];
[self.view addSubview:myVC.view];
[myVC didMoveToParentViewController:self];
[myVC willMoveToParentViewController:nil];
... remove subview.
您可以在两个控制器之间设置一个委托,以告知父控制器何时关闭视图,从而简化操作。您还可以使用
[self.view insertSubview:myVC atIndex:index]
或其他可能的功能(如在子视图上方插入等)在不同索引处添加子视图,以便在取消另一个子视图之前添加一个子视图,以提供更无缝的转换


希望这有帮助

请学习降价格式,这样其他人就不必为您设置问题的格式。[关闭]但您只是这样做了。:)正在处理此代码。它可以直接删除扩展视图,并根据我的答案中的说明显示您的重写。听起来你好像没按我说的做。[self-dismissViewControllerAnimated:YES completion:^{UIStoryboard*情节提要=[UIStoryboard storyboard with name:@“Main”bundle:nil];ExpandViewController*expandView=[storyboard InstanceViewController WithiIdentifier:@“ExpandViewController”];expandView.delegate=self;[expandView setEventDict:dict];[self-presentViewController:expandView动画:是完成:NULL];];是的,这正是我的建议。对不起,我想我不明白你在追求什么。该代码应该关闭现有的视图控制器并显示一个新的。实际上,我想要的是当前我显示一个展开视图控制器,但当用户单击视图中的按钮时,它将关闭展开视图控制器并显示它确认另一个数据。太棒了!很高兴我能帮上忙。