2012-03-23 10 views
1

私はストーリーボードを使用するようにアプリケーションを変換しています。私はこれが簡単な問題だと確信していますが、どういうわけか、私たちが古いXIBの世界から来ているように、それを行う「正しい」方法を理解できないようです。ストーリーボード使用時にUITabBarControllerでビュー間でデータを渡す

サブセクションの1つにUITabBarControllerがあり、それぞれにサブビューがいくつかあります。

この一連のタブを起動するアクションは完全に機能します。私はセグを検出し、私の(カスタム)UITabBarController内にいくつかのデータプロパティを設定します。

次に、作成したときにそのデータを子ビューに渡したいと考えています。しかし、これらのタブは単に「関係」でありセグのものではないため、私は他の場所で行うことはできません。これは「prepareForSegue」関数をオーバーライドします。

古いXIBユニバースでは、いくつかのIBOutletsをタブコントローラーと子ビューの間にまとめてバインドするだけです。しかし、私はストーリーボードでそれをすることはできません。なぜなら、親と子は別々の「シーン」であるからです。

私は「didSelectViewController」私のUITabBarControllerクラスは、独自のデリゲート、オーバーライドを実装して作ってみましたとそれはときに最初のタブで呼び出されることはありませんという事実を除いて、ほとんど作品、「self.delegate =自己」をやってきましたビューが最初に表示されます。

これを行うには「正しい」(または「ベスト」)方法はありますか?これは 'グローバル変数'の領域であるため、アプリケーション代理人の価値を得る/設定するよう教えてください。

答えて

1

UITabBarControllerのビューコントローラをループしてみてください。この例では、setDataメソッドがUITabBarControllerのsegueから呼び出され、子ビューコントローラをループして子コントローラで同様の呼び出しを行い、そのデータも設定します。

- (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]; 
      } 
     } 
} 
関連する問題