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

时间:2011-11-24 18:40:15

标签: ios xcode modal-dialog storyboard segue

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

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

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

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

2 个答案:

答案 0 :(得分:5)

查看this tutorial

根据它,你应该按如下方式设置代表:

- (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的名称

答案 1 :(得分:0)

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

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

        playerDetailsViewController.delegate = self;
    }
}

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