【问题标题】:push view controller after dismissing presented view controller关闭呈现的视图控制器后推送视图控制器
【发布时间】:2015-02-11 09:56:05
【问题描述】:

我有这个导航栈

RootVC ---> VC1 --> (presenting)-> ModalVC

我有 VC2(不在导航堆栈中)。

在呈现ModalVC时,我想点击我的ModalVC中的按钮来关闭ModalVC,然后在VC1之后将VC2推入导航堆栈一键式。它应该是这样的:

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

}

请帮助理解这种行为。我的错在哪里?

【问题讨论】:

标签: ios objective-c navigation pushviewcontroller presentviewcontroller


【解决方案1】:

来自Apple Documentation

呈现视图控制器负责关闭视图 它呈现的控制器。

所以,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];
}];

}

【讨论】:

  • 检查参数vc是否在dismissAndPush上实例化:
【解决方案2】:

错误出现在其他地方。如果我理解正确:关闭呈现的视图控制器之前的一些动画会阻塞导航堆栈中的动画。我用两种方法解决了这个问题:

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

}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
  • 2017-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多