2011-11-24 41 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

哦,等一下。以前的答案是這樣做的,但他們將目標視圖控制器分配給導航視圖控制器,您不必這樣做(我甚至不知道這是否可行)。 –

相關問題