6

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

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

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

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

4

2 回答 2

5

看看这个 教程

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

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

于 2011-11-24T19:21:43.930 回答
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

于 2012-05-03T02:09:51.917 回答