2011-11-13 22 views
7

我試圖使用新的情節串聯板功能,但是我對情節串聯關係感到困惑?它們與IBOutlets有何不同?iOS中的情節串聯關係

另外我該如何將自己的關係添加到我自己的UIViewController子類中?

我已經試過在文檔中查找,但無法找到關於它們的很多內容。

回答

8

我理解的方式是:關係是代表「父子」 關係的iOS版的方式,而這似乎相當遞歸,親子關係的一個例子是包含一個UIViewController一個UIViewController容器。

無論如何這就是理論 - 使用UINavigationController可以更好地理解。它被稱爲'容器',因爲它在'堆棧'隱喻中包含了許多常規UIViewController,所以你可以做普通的UITableView鑽取和彈出。

關鍵在於UINavigationController和你的堆棧中的第一個UIViewController之間存在一個'關係',而所有其餘的UIViewControllers之間的segue只是一個普通的push segue。它在UISplitViewController(容器)和兩個常規(內容)視圖控制器之間連接起來,它們需要兩個視圖控制器(有時稱爲內容視圖控制器)

(因此關係不喜歡IBOutlets,而更像是塞格斯 - 他們甚至在標準視圖控制器容器的「塞格斯」類別)

現在 - 我們是不允許子類的標準視圖控制器容器,但我們被允許創建自定義視圖控制器容器,但是我無法在我的自定義視圖中定義關係控制器容器!!!!!!!!!!!

所以:「我可以在我自己的控制器中使用它們嗎?」答案是未知的(至少對我來說,和文檔是薄充其量)

-1

我寫了一篇關於如何在我的網站上使用故事板在幾個教程...

Part 1 of tutorial

Part 2 of tutorial

也許,這將有助於一點點?實質上,Segue關係爲故事板上的兩個項目之間的鏈接提供了一個標識符。您可以使用這些標識符來管理事情的工作方式。

+0

那麼這與IBOutlet有什麼不同?我怎樣才能在我自己的控制器中使用它們? –

+0

當您創建一個segue時,它允許您指定一個標識符。您使用該標識符來檢查當前是否正在使用segue從一個控制器(或其他)轉換到另一個控制器。您不會以任何其他方式真正使用它們 - 因此它們與IBOutlets在這方面有所不同。他們也被用來識別如何推新視圖(push/modal/popover等)。我鏈接的教程展示瞭如何在你自己的控制器中使用它們。 – Simon

+0

更新了教程的鏈接,最近在網站移動後損壞。我認爲這是造成無法解釋/無理推倒的原因。 – Simon

1

創建UIStoryboardSegue的這樣的一個子類:

@implementation JTARelationshipSegue 

- (void)perform 
{ 
    return; 
} 

@end 

讓你的兩個對象之間的自定義賽格瑞並設置類作爲JTARelationshipSegue。在您的視圖控制器使視圖控制器執行SEGUE這樣的:

- (void)viewDidLoad 
{ 
    ... 
    [self performSegueWithIdentifier:@"addChild" sender:self]; 
} 

你需要有設置在界面生成器的addChild的塞格斯標識符。

Impement prepareForSegue:sender,使其增加了塞格斯目的地視圖控制器爲當前視圖控制器的孩子,像這樣:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    UIViewController *destination = [segue destinationViewController]; 
    [self addChildViewController:destination]; 
    ... 
} 

您需要爲每個孩子,你想要一個不同的SEGUE標識符創建(或另一種方式來識別特定的視圖控制器)

這會讓您的故事板文件看起來更漂亮,更具可讀性,但是您可能會做得更好,只需加載其他視圖控制器並將它們添加爲視圖中的子項即可加載方法:

- (void)viewDidLoad 
{ 
    [self addChildViewController: 
     [[self storyboard] 
      initiateViewControllerWithIdentifier:@"myIdent"]]; 
... 
} 
+0

這相當聰明,雖然它似乎不是100%正確的方式來使用segue。我不認爲UINavigationController這樣做是爲了暴露rootViewController關係......但是誰知道。 – cynistersix

+0

這完全有效,現在我正在用故事板連接線路,方便您的方法閱讀。 – cynistersix