2012-03-23 94 views
1

我一直在將應用程序轉換爲使用故事板。我確信這是一個簡單的問題,但不知怎的,我似乎無法弄清楚「正確的」做法,因爲我們來自舊的XIB世界。使用故事板時在UITabBarController之間傳遞數據視圖

其中的一個子部分包含一個UITabBarController,每個UITabBarController中都有一些子視圖。

啓動這組標籤的操作完美無缺;我檢測到segue,並在我的(自定義)UITabBarController中設置了一些數據屬性。

接下來,我希望能夠將這些數據傳遞給子視圖創建時。但是 - 因爲這些標籤只是'關係'而不是塞格',所以我不能做我在其他地方做的事情,這是'prepareForSegue'函數的重寫。

在舊的XIB Universe中,我只是將一些IBOutlet綁定在Tab控制器和子視圖之間。但是我不能在故事板中這樣做,因爲父母和孩子是不同的「場景」。

我試圖讓我的UITabBarController類實現了自己的委託,覆蓋「didSelectViewController」,做「self.delegate =自我」,這幾乎作品,除了事實,它從未被稱爲與第一個選項卡時,該視圖最初顯示。

什麼是「正確」(或「最好」)的方式來做到這一點?請不要告訴我在應用程序代理上獲得/設置一些價值,因爲這是「全局變量」領域 - 討厭。

回答

1

嘗試通過UITabBarController上的視圖控制器進行循環,例如,在這個例子中,setData方法被從segue調用到UITabBarController,然後它通過子視圖控制器循環,在子控制器上也進行類似的調用以設置數據;

- (void)setData:(MyDataClass *)newData 
{ 
    if (_myData != newData) { 
     _myData = newData; 

     // Update the view. 
     [self configureView]; 
    } 

} 

- (void) configureView { 
     for (UIViewController *v in self.viewControllers) 
     { 
      if ([v isKindOfClass:[MyDetailViewController class]]) 
      { 
       MyDetailViewController *myViewController = v; 
        [myViewController setData:myData]; 
      } 
     } 
} 
相關問題