26

ストーリーボードにUITabBarControllerを設定しています。標準のUIViewControllerである適切な子タブで使用するために、タブバーコントローラーからデータのディクショナリを渡したい。

これは答えるのに長い質問のように思えますが、私は本当にどこから始めればよいのかわかりません。私はこれを介して最も簡単な方法を探しています。タブをプログラムで機能させる必要がありますか?有用な開発者向けドキュメントを紹介していただければ幸いです。

-オースティン
ps私は新しく、これまでビューコントローラーの移行をストーリーボードに依存してきました

4

6 に答える 6

22

数日かかりましたが、簡単な解決策を見つけました。TabBarController の viewDidLoad メソッドで、次を使用してタブ付きサブビューの属性にアクセスして設定できます

    [[self viewControllers] objectAtIndex:0]

またはアクセスしたいインデックス。

これを tab1_viewController のインスタンスとして保存すると、オブジェクトへのポインタが得られ、そこからプロパティ値を取得および設定できます。ストーリーボードが tab_viewController オブジェクトを作成したため、これは最初は不明でした。思い通りに初期化する機会がありませんでした!

于 2012-05-25T05:11:39.370 に答える
4

あなたの最善の策は、通知を使用することです。

タブバーでは、次のようにします。

NSDictionary *myDictionary; // Populate this with your data.

// Fire the notification along with your NSDictionary object.
[[NSNotificationCenter defaultCenter] postNotificationName:@"Some_Notification_Name" 
                                                    object:myDictionary];        

次に、子タブのViewControllerで、その通知を「リッスン」します。

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(handleNotification:) 
                                             name:@"Some_Notification_Name" 
                                           object:nil];

- (void)handleNotification:(id)object {
  // Use your NSDictionary object here.
}
于 2012-05-19T00:54:22.437 に答える
1

スウィフトの使用

UINavigationControllerのタブの 1 つとして持っている場合UITabBarControllerは、新しいインスタンスを作成する代わりに子ビュー コントローラーのインスタンスを取得し、それをナビゲーション ビュー コントローラーにプッシュしてから、タブ ビュー インデックスを変更します。あなたはこれを行うことができます...

このサンプル コードでは、Navigation Controller が最初のタブ (インデックス 0) にあり、"childViewController" が Navigation Controller に埋め込まれていることを前提としています。

let viewControllers = self.tabBarController?.viewControllers

let navController = viewControllers![0] as! UINavigationController

let profileViewController = self.storyboard?.instantiateViewControllerWithIdentifier("childViewController") as? ProfileViewController

profileViewController!.parameter1 = "Value1"

profileViewController!.parameter2 = "Value2"

navController.pushViewController(profileViewController!, animated: true)

self.tabBarController?.selectedIndex = 0
于 2016-08-23T00:15:30.587 に答える
1

スウィフトの場合:

if let navController = self.tabBarController?.viewControllers?[1] as? UINavigationController{
        if let testController = navController.childViewControllers.first as? MyViewController{
            testController.data = data
            self.tabBarController?.selectedIndex = 1
        }
}
于 2017-01-26T01:34:55.223 に答える