0

我的应用程序中的选项卡视图存在很大问题。我的问题是我在标签栏中间使用了一个自定义 UIButton ,然后在我更改索引时手动调用了didSelectViewController委托方法。UITabBarControllerDelegate

问题是,当我想检查已选择的视图控制器时,我没有得到正确的视图控制器实例。

代码:

-(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];
}

我假设您是从标签栏控制器的视图控制器之一调用它,所以我使用 self.tabBarController。如果这不是真的,那么您将不得不更改该参考。

于 2013-06-03T14:29:55.930 回答