0

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

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 上的页数。

谢谢!

4

2 回答 2

1

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

在.h中:

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

在他们中:

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

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

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

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

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

于 2015-01-15T08:56:57.597 回答
-1

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

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

于 2012-11-05T22:02:25.750 回答