当模式视图通过弹出窗口呈现时,未在主视图中调用ViewDidAppear

时间:2012-11-05 21:23:40

标签: ios ipad modal-dialog popover pagecontrol

我正在尝试使用popover作为主视图和模态视图控制器之间的中间菜单。我可以使用以下代码从popover成功呈现Modal视图控制器:

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模式视图控制器中设置的页数,但由于某种原因,从弹出窗口调用模态视图控制器会阻止主视图控制器更新页面控制器。我甚至尝试在断开时从popover或modal视图调用主视图的“View Will Appear”方法,但是即使调用'viewWillAppear'方法,pageController也不会更新! < / p>

有什么想法阻止pageController更新?我甚至将对页面控制器的引用传递给了模态视图,并尝试在那里更新它,但似乎从弹出窗口出现直到它被解除时,我无法更新PageController上的页面数。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

在.h:

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

在.m:

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

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

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

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

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

答案 1 :(得分:-1)

好吧,我一半解决了这个问题。当弹出窗口消失时获取更新功能的唯一方法是停止使用Storyboard并以编程方式显示弹出窗口,使用主视图作为委托。然后我能够在popoverControllerDidDismissPopover方法中正确更新。

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