0

UITabBarControllerの別々のタブにあることで表される2つの基本的な関数があるアプリがあります。各タブには特定のボタンがあり、押すと、通常のアクティビティとは別の機能として、他のタブにもデータをゼロにするように非同期で指示する必要があります。あるタブから別のタブにアクセスするにはどうすればよいですか?

4

4 に答える 4

2

これは通知に適しています(NSNotificationローカル通知やプッシュ通知ではありません)。

各タブのビューコントローラごとに、ある種のモデルが必要です。各モデルは、他のモデルの登録中に通知を公開できます。このように、ビューコントローラもモデルも実際に相手を直接知る必要はありません。

ユーザーがボタンをタップすると、ViewControllerはモデルに通知を公開するように指示します。もう1つは通知を受け取り、それに応じて行動します。

詳細については、ドキュメントを参照しNSNotificationCenterNSNotificationください。

于 2013-03-18T22:08:31.033 に答える
1

TabBarControllerのviewControllersプロパティから各viewControllerにアクセスし、それらを反復処理できます。ライブのもの(自己)以外はすべてゼロにします。

非同期性のためにGCDディスパッチキューに入れます。

    - (IBAction)pushButton:(id)sender {
        NSLog (@"%@ %@",self,NSStringFromSelector(_cmd));

            //do normal stuff here

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

            for (id viewController in  [[self tabBarController] viewControllers]) {
                if ((viewController != self)
                && ([viewController respondsToSelector:@selector(zeroData)])) {
                    [viewController performSelector:@selector(zeroData)];
                }
            }
        });
    }



    - (void) zeroData
    {
        NSLog (@"%@ %@",self,NSStringFromSelector(_cmd));
                //each view controller should zero out it's own data
                //in a method called "zeroData"
    }

これを試してログを見ると、現在のvcはそのままで、他のvcに送信zeroDataされていることがわかります...

于 2013-03-18T22:39:32.130 に答える
1

UITabBarControllerの「タブ」の定義

// define controllers for each tab
UIViewController *viewController1 = [[UIViewController alloc] init];
UIViewController *viewController2 = [[UIViewController alloc] init];

// define tab bar controller, "self" is a UITabBarController
self.viewControllers = [NSArray arrayWithObjects: viewController1, viewController2, nil];

この時点から、特定のタブにアクセスする必要がある場合は、「viewController1」または「viewController2」オブジェクトを介してアクセスする必要があります。これらのUIViewControllerオブジェクトのそれぞれは、おそらくアプリケーション内の特定のデータにアクセスできます。

于 2013-03-18T22:26:34.340 に答える
0

タブはコアデータ駆動型ですか?NSFetchedResultsControllerを使用する場合は、NSFetchedResultsControllerDelegateプロトコルを介して無料で通知を受け取ります。そうでなければ、rmaddyのようなNSNotificationが示唆します。

于 2013-03-18T23:11:58.537 に答える