关闭并显示相同的视图控制器

时间:2015-05-20 15:02:02

标签: ios uiviewcontroller

我有一个视图控制器,我需要解雇它并同时显示它。 我试过解雇它并回叫视图控制器但没有工作。

[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];

2 个答案:

答案 0 :(得分:1)

在当前呈现的视图控制器完成解除之前,您无法呈现视图控制器。在你被解雇的completion处理程序被调用之前,你不会知道这已经发生了。你的错误是completion处理程序是nil。相反,提供一个completion处理程序(在第一行),包含代码的其余行。因此,他们将在解雇后执行

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

答案 1 :(得分:1)

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

添加子vc:

[self addChildViewController:myVC];
[self.view addSubview:myVC.view];
[myVC didMoveToParentViewController:self];

删除子vc:

[myVC willMoveToParentViewController:nil];
... remove subview.

您可以在两个控制器之间设置一个委托,告诉父母何时解除视图以使事情变得简单。您还可以使用[self.view insertSubview:myVC atIndex:index]或其他可能的功能(例如上面的子视图等插入)在不同的索引处添加子视图,以便在解除另一个子视图之前添加一个子视图以提供更无缝的转换。

希望这有帮助!