0

アプリケーションのタブビューにかなりの問題があります。私の問題は、タブバーの途中でカスタム UIButton を使用していて、インデックスを変更するときにdidSelectViewControllerデリゲート メソッドをUITabBarControllerDelegate手動で呼び出していることです。

問題は、選択されているviewControllerを確認したいときに、viewcontrollerの正しいインスタンスを取得していないことです。

コード:

-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
    UIViewController *tempController = [tabBarController.viewControllers objectAtIndex:2];
    if (viewController == [tabBarController.viewControllers objectAtIndex:2]) //Never the same
    {
        [(UINavigationController *)viewController popToRootViewControllerAnimated:NO];
        NSLog(@"Popping to root");
    }
}

そして、私はここでメソッドを呼び出しています:

-(void) notifmethod{

    UIViewController *cameraViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"cameraNavViewController"]; //Tried this
    //CameraNavController *viewController = [[CameraNavController alloc] init];/And this
    [self tabBarController:self didSelectViewController:cameraViewController]; //The call
    NSLog(@"This called");
}

popToRootViewControllerAnimated:NOこれの主な理由は、特定のビューコントローラーが選択されている場合にしたいからです。助けてくれてありがとう!

4

1 に答える 1

2

あなたの問題は、既にタブ バー コントローラーに関連付けられているものを取得するのではなく、notifmethod で cameraViewController の新しいインスタンスを作成していることだと思います。また、デリゲート メソッドを呼び出す必要はありません。これを行うだけです。

-(void) notifmethod{

    UINavigationController *nav = self.tabBarController.viewControllers[2];
    [nav popToRootViewControllerAnimated:NO];
}

タブ バー コントローラーのビュー コントローラーの 1 つからこれを呼び出していると想定しているので、self.tabBarController を使用します。これが当てはまらない場合は、その参照を変更する必要があります。

于 2013-06-03T14:29:55.930 に答える