0

我有一个应用程序,其中有两个基本功能,通过在 UITabBarController 上的单独选项卡上进行描述。每个选项卡都有一个特定的按钮,当按下该按钮时,它应该作为其正常活动的一个单独功能,也异步告诉另一个选项卡将其数据归零。如何从另一个选项卡访问一个选项卡?

4

4 回答 4

2

这将是通知的一个很好的用途(例如NSNotification,不是本地或推送通知)。

每个选项卡中的每个视图控制器都应该有某种模型。每个模型都可以在注册另一个模型时发布其通知。这样,视图控制器或模型都不需要直接了解对方。

当用户点击一个按钮时,视图控制器告诉它的模型发布它的通知。另一个将收到通知并采取相应措施。

NSNotificationCenter有关详细信息,请参阅文档NSNotification

于 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,但发送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

Are your tabs core-data driven? If you use a NSFetchedResultsController then you get notifications for free through the NSFetchedResultsControllerDelegate protocol. Otherwise, NSNotification like rmaddy suggests.

于 2013-03-18T23:11:58.537 回答