首页 文章

解雇模态及其调用者

提问于
浏览
1

对不起,但类似的问题都没有提供有效的解决方案 .

新的单视图项目 . 故事板动作:

  • VC1嵌入在nav-controller中

  • VC1中的按钮激活VC2中的推送序列

  • VC2中的按钮激活VC3中的模态segue

  • VC3有一个按钮和一个UIViewController子类来处理按钮动作

Problem statement: 如何让模态VC3的按钮立即关闭 both VC3和VC2,将我带回VC1?

这不起作用 - 只带我去VC2:

- (IBAction)dismissPressed:(id)sender {
    UINavigationController *myNavController = [self navigationController];
    [self dismissViewControllerAnimated:NO completion:^{
        [myNavController popToViewController:[myNavController.viewControllers objectAtIndex:1] animated:NO];
    }];
}

非常感谢你!

3 回答

  • 0

    好的,这是解决方案:

    如果您可以将自己限制为ios6,正确的答案是按下按钮What are Unwind segues for and how do you use them?

    但如果你像我一样并且必须遵守ios5,解决方案就是这样的:

    在调用模态segue的VC中声明一个这样的委托:

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        if ([segue.identifier isEqualToString:@"segueModalVC"]) {
            ModalVC *vc = [segue destinationViewController];
            vc.prevVC = self;
        }
    }
    

    您必须#import目标模态VC的标头 .

    现在在模态VC本身添加一个属性来保存以前的VC,如下所示:

    @property (weak, nonatomic) UIViewController *prevVC;
    

    现在按钮弹出两个VC的操作应如下所示:

    - (IBAction)pressedMainMenu:(id)sender {
        [self dismissViewControllerAnimated:YES completion:nil];
        [[self.prevVC navigationController] popViewControllerAnimated:NO];
    }
    

    [编辑显示完美版本的最终版本,可以将动画从VC3翻转回VC1 . 花了我几个小时来完成这个,但现在你可以免费享受:)]

    恕我直言,模态VC没有'本地'方法来访问其前面的VC是一个设计错误 .

  • 0

    使用self.presentingViewController找出"previous view controller" . 您不需要通过属性传递上一个视图控制器 .

    - (IBAction)dismissPressed:(id)sender {
        UIViewController *presentingViewController = self.presentingViewController;
        [self dismissViewControllerAnimated:NO completion:^{
            [self.presentingViewController popViewControllerAnimated:TES];
        }];
    }
    
  • 0

    尝试使用popToRootViewControllerAnimated方法返回VC1 .

    - (IBAction)dismissPressed:(id)sender {
        UINavigationController *myNavController = [self navigationController];
        [self dismissViewControllerAnimated:NO completion:^{
            [myNavController popToRootViewControllerAnimated: NO];
        }];
    }
    

相关问题