选择tabview时,获取正确的UIViewController实例 - IOS

时间:2013-06-03 11:19:03

标签: iphone ios uiviewcontroller uitabbarcontroller

我的应用程序中的tabview存在很大问题。我的问题是我在tabbar中间使用自定义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。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

我认为您的问题是您在notifmethod中创建了一个新的cameraViewController实例,而不是获取已经与标签栏控制器关联的实例。此外,没有必要调用委托方法,但是这样做:

-(void) notifmethod{

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

我假设你是从一个标签栏控制器的视图控制器调用它,所以我使用self.tabBarController。如果不是这样,那么你必须改变那个参考。