如何从tabbar rootview控制器调用方法

时间:2013-05-28 03:15:10

标签: objective-c xcode cocoa-touch

我有3个tabbar项目,每个项目都是一个视图控制器。第一,第二和第三视图控制器。我需要First ViewController来调用在第二个视图控制器视图上更新tableview的方法。我不确定处理这个问题的正确方法是什么。我尝试了一个sharedInstance,但我认为正在发生的是正在创建两个实例,并且第一个VM正在使用的视图控制器与应用程序中实际使用的VM不同,这可以解释为什么我的tableview不是'更新。

基本上,当我在First View Controller中上传文件时,我需要第二个VM来更新tableview并显示文件的上传进度。有点像在iTunes上购买歌曲时。这些是标签项的UINavigationViewControllers。

我试过了:

+ (SecondViewController *)sharedInstance {
// Singleton implementation
static SecondViewController* instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    instance = [[SecondViewController alloc] init];
});

return instance;
}

 - (void)viewDidLoad
 {
  [super viewDidLoad];
  UploadTableView.dataSource = self;
  UploadTableView.delegate = self;

  [S3UploadClientManager tm].delegate = self;

 }

2 个答案:

答案 0 :(得分:1)

您不希望控制器直接相互通信。如果您正在转向其他视图,则可以使用prepareForSegue。如果您不想使用它,我建议您更新两个控制器都可以访问的文件或数据库,以避免直接交互并保留mvc架构。

答案 1 :(得分:0)

您可以实现tabBarController委托方法:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if([viewController isMemberOfClass[SecondViewController class]]) {
//pass the data here
}
}