如何在xcode 4.2故事板中正确使用模态视图控制器

我想知道如何正确使用故事板以模态方式放置视图控制器。 就个人而言,我更喜欢使用xibs,但似乎故事板越来越受欢迎,将来会成为未来的发展方向。

我通常以模态方式设置视图控制器的方式如下:假设我们有ViewControllerA(简称A)和ViewControllerB(简称B)。 然后我通常会在Bh中指定委托方法,当B想要被解雇时添加一个协议,并将id delegate字段添加为assign属性。 假设我在A忙,我想以模态方式呈现B,我会写:

 B* b = [[B alloc] initWithNibName:@"B" bundle:nil]; b.delegate = self; [self presentModalViewController:B animated:YES]; 

使用故事板,我知道可以通过从按钮拖动到视图控制器并选择模态作为过渡类型,以模态方式设置不同的视图控制器。 我只是想知道; 我在哪里设置新视图控制器的委托? 将事物传递给模态视图控制器的正确做法是什么? 我真的不知道Segues的整个交易是什么……

看一下本 教程

根据它,您应该如下设置委托:

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"AddPlayer"]) { UINavigationController *navigationController = segue.destinationViewController; PlayerDetailsViewController *playerDetailsViewController = [[navigationController viewControllers] objectAtIndex:0]; playerDetailsViewController.delegate = self; } } 

其中@“AddPlayer”是“模态”segue的名称

您可以直接使用prepareForSegue传递的UIStoryboardSegue对象,而不是使用导航控制器。 它有一个名为destinationViewController的属性,它是正在实例化的视图控制器。 我觉得很清洁。 这是一个例子。

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"AddPlayer"]) { PlayerDetailsViewController *playerDetailsViewController = (PlayerDetailsViewController *) segue.destinationViewController; playerDetailsViewController.delegate = self; } } 

IMO我认为故事板非常棒,因为它们的function就像应用程序的蓝图。 我也从不喜欢笔尖。 = d