/ /タブバールートビューコントローラーからメソッドを呼び出す方法-objective-c、xcode、cocoa-touch

どのようにtabbarのrootviewコントローラからメソッドを呼び出す - objective-c、xcode、cocoa-touch

3つのタブバーアイテムがあり、それぞれがビューコントローラーです。1番目、2番目、および3番目のビューコントローラー。 2番目のViewControllerビューのテーブルビューを更新するメソッドを呼び出すには、FirstViewControllerが必要です。これを処理する正しい方法が何であるかわかりません。 sharedInstanceを試しましたが、2つのインスタンスが作成されており、最初のVMが使用しているビューコントローラーが「アプリで実際に使用されているのと同じVMではないため、テーブルビューが作成されない理由がわかります」と思われます。 t更新。

基本的にFirstViewでファイルをアップロードするときコントローラー、テーブルビューを更新してファイルのアップロードの進行状況を表示するには、2番目のVMが必要です。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;

}

回答:

回答№1は1

コントローラが互いに直接通信することは望ましくありません。別のビューにセグエする場合は、次を使用できます。 prepareForSegue。それを使用したくない場合は、直接の相互作用を回避し、MVCアーキテクチャを維持するために、両方のコントローラーがアクセスできるファイルまたはデータベースを更新することをお勧めします。


回答№2の場合は0

tabBarControllerデリゲートメソッドを実装できます。
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if([viewController isMemberOfClass[SecondViewController class]]) {
//pass the data here
}
}