我有一个视图控制器,我需要解雇它并同时显示它。 我试过解雇它并回叫视图控制器但没有工作。
[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];
答案 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]
或其他可能的功能(例如上面的子视图等插入)在不同的索引处添加子视图,以便在解除另一个子视图之前添加一个子视图以提供更无缝的转换。
希望这有帮助!