2011-11-24 39 views
6

我想知道如何正确使用故事板以模块形式放置视图控制器。就我个人而言,我更喜欢与xibs合作,但似乎故事板越来越受欢迎,并将成为未来的发展方向。我通常会以模态方式放置视图控制器的方式如下:假设我们有ViewControllerA(简称A)和ViewControllerB(简称B)。 然后,我通常会在B中指定一个协议,指定B想要被解散时的委托方法,并将id<theProtocol> delegate字段作为assign属性添加。假设我很忙的一个,我想B存在模态,我会写:如何正确使用模式视图控制器与xcode 4.2故事板

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

用故事板,我知道这是可能的,按ctrl拖动从把一个不同的视图控制器在模式方式一个按钮到视图控制器并选择模式作为过渡类型。我只是想知道;我在哪里设置新的视图控制器的代表?将东西传递给模态视图控制器的正确做法是什么?我真的不知道整个处理塞格斯是什么...

回答

5

thistutorial

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

- (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”是您的'模态'赛格的名称

+1

我看了一下教程,很明显我没有怀疑你的回复,但是你不认为这比以前更丑吗?看起来像这样的麻烦去做一些非常简单的事情... – Warkst

+1

如果你看起来很丑陋,不要使用故事板 –

+1

这是我现在不使用它们的主要原因,我只是“害怕”他们将成为未来的主要方式。 – Warkst

0

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

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

     playerDetailsViewController.delegate = self; 
    } 
} 

IMO我认为故事板是伟大的,因为它们的功能就像您的应用程序的蓝图。我也从来没有喜欢过尼布斯。 = D

+0

哦,等一下。以前的答案是这样做的,但他们将目标视图控制器分配给导航视图控制器,您不必这样做(我甚至不知道这是否可行)。 –

相关问题