1

ストーリーボードを使用したナビゲーションコントローラーアプリを備えたタブバーがあります。
私の目的は、タブ3のボタンを押すことであり、バックグラウンドでタブ1を「popToRootViewController」にしたいです

tab3 ビューコントローラーのボタン:

- (IBAction)Action:(id)sender {

    vc1 * first = [[vc1 alloc]init];
    [first performSelector:@selector(popToRootViewController) withObject:Nil];

}

tab1 ビューコントローラーのコード

-(void)popToRootViewController{

    [self.navigationController popToRootViewControllerAnimated:NO];
    NSLog(@"popToRootViewController");
}

popToRootViewControllerログを取得しましたが、アクションは実行されませんでした。

問題を解決します:

- (IBAction)Action:(id)sender {

        [[self.tabBarController.viewControllers objectAtIndex:0]popToRootViewControllerAnimated:NO];


    }
4

4 に答える 4

2

あなたがやっている方法:

vc1 * first = [[vc1 alloc]init];
[first performSelector:@selector(popToRootViewController) withObject:Nil];

は正しくありません。実際、ここではまったく新しいコントローラーを作成しています。これは、既存のコントローラーから完全に独立しており、どのナビゲーション コントローラーにも属していません。このため、self.navigationControllernil入っていpopToRootViewControllerます。

次のようなことを試してみてください:

 //-- this will give you the left-most controller in your tab bar controller
 vc1 * first = [self.tabBarController.viewControllers objectAtIndex:0];
[first performSelector:@selector(popToRootViewController) withObject:Nil];
于 2014-01-09T10:49:13.527 に答える
1

TabBarViewController で TabBar をバインド -
tabBarViewController.m 内

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    NSArray *array = [tabBarController viewControllers];
    if([[array objectAtIndex:tabBarController.selectedIndex] isKindOfClass:[UINavigationController class]])
        [(UINavigationController *)[array objectAtIndex:tabBarController.selectedIndex] popToRootViewControllerAnimated: NO];
}

それは私にとって完璧に機能しました。

于 2014-01-09T10:55:34.990 に答える