【问题标题】:Dismissing presenting modal ViewController关闭呈现模式 ViewController
【发布时间】:2015-06-25 14:16:37
【问题描述】:

我有一个ViewController,它显示了一个模态视图控制器。在这个模态视图控制器中,我想展示一个MailComposeViewController。我的问题是在解雇期间。我想同时关闭两个显示的ViewController

我的前任抓取了presentingViewController 的一个实例,发送一条消息以显示MailComposeViewController,并在BaseViewController 中关闭了模态视图控制器。

[self dismissViewControllerAnimated:YES
                            completion:^{
                                 [self presentViewController:mailViewController animated:YES completion:nil];
                             }];

我目前试图阻止这种情况,因为它是一个神级(超过 5kloc),我需要将它拆开。

所以我尝试在模态 ViewController 中使用相同的模式,但改用了self.presentingViewController。这导致只是关闭模态 ViewController,但不显示任何内容。

在解雇之前抓取一个实例有效,但解雇的委托回调被忽略(难怪,因为模式 ViewController 不再显示)。

所以进入委托回调- (void) mailComposeController:(MFMailComposeViewController*) controller didFinishWithResult:(MFMailComposeResult) result error:(NSError*) error

我试图在没有动画的情况下在 MailComposeViewController 之前关闭模态 ViewController。这也删除了MailComposeViewController(也不足为奇)。我可以先关闭MailComposeViewController,然后关闭模态视图控制器,但这会创建一个不同的动画,其中控制器在不同的时间和顺序被关闭(我们都知道用户体验如何对类似的东西做出反应;))。

还有其他选项,我可以先关闭模态视图控制器,然后显示MailComposeViewController,而BaseViewController 中没有任何关闭代码?

谢谢:)

【问题讨论】:

    标签: ios objective-c uiviewcontroller


    【解决方案1】:

    呈现视图控制器负责关闭它呈现的视图控制器。如果您在呈现的视图控制器本身上调用此方法,它会自动将消息转发到呈现的视图控制器。

    另一方面,呈现视图控制器当然负责呈现。因此,如果在 BaseViewController 中没有任何解除代码,就无法呈现新的视图控制器,在您的情况下是呈现视图控制器

    你可以在没有动画的情况下关闭,然后呈现新的

    [self dismissViewControllerAnimated:NO
                             completion:^{
                                   [self presentViewController:mailViewController animated:YES completion:nil];
                                 }];
    

    【讨论】:

      【解决方案2】:

      似乎我在获取presentingViewController 的实例并使用它时是错误的。我只需要在任何地方使用它。所以我最终得到了这段代码来关闭modal ViewController并显示MailComposeViewController

      self.presenter = self.presentingViewController;
      [self dismissViewControllerAnimated:YES
                                   completion:^{
                                       [self.presenter presentViewController:mailViewController animated:YES completion:nil];
                                   }];
      

      要关闭 MailComposeViewController,我在 delegateMethod 中调用:[self.presenter dismissViewControllerAnimated:YES completion:nil];

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-06
        • 1970-01-01
        • 2018-03-07
        • 2019-11-15
        • 2023-03-18
        • 2020-04-27
        相关资源
        最近更新 更多