我有这个导航堆栈
RootVC--->VC1-->(演示)->ModalVC
并且我有VC2(不在导航堆栈中)。
当呈现ModalVC时,我想单击我的ModalVC中的按钮以关闭ModalVC,然后在VC1之后将VC 2一键推入导航堆栈。它应该是这样的:
RootVC--->VC1-->VC2
我尝试了很多方法来实现它,但只有当我返回到RootVC时才触发事件。
我试着与代表们合作:
在ModalVC中单击:
[self dismissViewControllerAnimated:YES completion:^{
if ([self.delegate respondsToSelector:@selector(dismissAndPush:)]) {
[self.delegate performSelector:@selector(dismissAndPush:) withObject:VC2];
}
}];
在VC1中:
- (void)dismissAndPush:(UIViewController *)vc {
[self.navigationController pushViewController:vc animated:NO];
}
请帮助理解这种行为。我的错误在哪里?
来自苹果文档:
呈现视图控制器负责驳回视图控制器。
所以,VC1应该解雇ModalVC,试着做这个
ModalVC点击:
if ([self.delegate respondsToSelector:@selector(dismissAndPush:)]) {
[self.delegate performSelector:@selector(dismissAndPush:) withObject:VC2];
}
在VC1:中
- (void)dismissAndPush:(UIViewController *)vc {
[self dismissViewControllerAnimated:YES completion:^{
[self.navigationController pushViewController:vc animated:NO];
}];
}
其他地方出现错误。如果我理解得对的话:在解除呈现的视图控制器之前的一些动画会阻塞导航堆栈中的动画。我用两种方法解决了这个问题:
1) 在解除之前删除或设置正确的动画
2) 在导航控制器中使用setViewControllers(我选择它)
- (void)dismissAndPush:(UIViewController *)vc {
[self dismissViewControllerAnimated:NO completion:^{
NSMutableArray *mutableControllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
NSArray *controllers = [mutableControllers arrayByAddingObject:vc];
[self.navigationController setViewControllers:controllers animated:NO];
}];
}