【问题标题】:ViewDidAppear not called in main view when modal view is presented over a popover当模态视图显示在弹出框上时,未在主视图中调用 ViewDidAppear
【发布时间】:2012-10-25 18:58:49
【问题描述】:

我正在尝试使用弹出框作为我的主视图和模态视图控制器之间的中间菜单。我可以使用以下代码成功地从弹出窗口中显示模态视图控制器:

UIStoryboard *storyboardiPad = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil];
cbwEditControlPanel *editCP = [storyboardiPad instantiateViewControllerWithIdentifier:@"EditCP"];

UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:editCP];
[nav setToolbarHidden:NO];
[nav setModalPresentationStyle:UIModalPresentationFullScreen];
[nav setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[self presentViewController:nav animated:YES completion:nil];
self.modalInPopover = NO;

我遇到的问题是当 EditCP 模式视图控制器被关闭时,主视图控制器永远不会更新。我在主视图上有一个页面控制器,应该更新它以反映在 EditCP 模式视图控制器中设置的页面数,但由于某种原因,从弹出窗口调用的模式视图控制器会阻止主视图控制器更新页面控制器。我什至尝试在弹出窗口或模式视图被关闭时调用主视图的“View Will Appear”方法,但即使调用了“viewWillAppear”方法,pageController 也不会更新!

知道是什么阻止了 pageController 更新吗?我什至将 pagecontroller 的引用传递给模态视图并尝试在那里对其进行更新,但似乎从弹出窗口出现直到它被关闭,我无法更新 PageController 上的页数。

谢谢!

【问题讨论】:

    标签: ios ipad modal-dialog popover pagecontrol


    【解决方案1】:

    所以这是一个老问题,但我最近在使用弹出框时也遇到了类似的问题。我的解决方案是使用 unwind segue 来触发我的父视图以执行某些操作。在我的情况下,我的父视图包含联系信息,弹出框包含引用列表。一旦用户从弹出窗口中选择了新城市,我想做的就是让父视图更新为新城市。因此,在我的父视图中,我按如下方式创建我的展开函数:

    在.h中:

    - (IBAction)unwindToContactTVC:(UIStoryboardSegue *)unwindSegue;
    

    在.m中:

    - (IBAction)unwindToContactTVC:(UIStoryboardSegue *)unwindSegue
    {
        [self updateTableForOffice];
    }
    

    在上面的 .m 文件中,您可以在父视图中执行您想做的任何事情的逻辑。要连接此展开 segue,请转到情节提要中的子视图并控制从视图图标拖动到退出图标。您应该会看到一个弹出窗口,其中包含您的 unwind segue 名称。

    最后,给 unwind segue 命名,然后在 viewWillDisappear() 函数的子控制器中调用 segue,如下所示:

    - (void)viewWillDisappear:(BOOL)animated
    {
        [self performSegueWithIdentifier:@"unwind-to-contact-tvc" sender:self];
    }
    

    我希望这会有所帮助。如果有人有更好的解决方案,请告诉我。

    【讨论】:

      【解决方案2】:

      嗯,我解决了一半的问题。当弹出框消失时获得更新功能的唯一方法是停止使用 Storyboard 并以编程方式呈现弹出框,使用主视图作为委托。然后我能够在 popoverControllerDidDismissPopover 方法中正确更新。

      但是,我仍然有兴趣找到一种方法来在模式被解除时更新 pageControl,在弹出框被解除之前。

      【讨论】:

      • 您已经提到这个答案不是解决方案。请检查@Przemek 的答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多