当选择tabview - IOS时获得正确的UIViewController实例



我在我的应用程序中的tabview有一个相当大的问题。我的问题是,我在标签栏中间使用一个自定义UIButton,然后当我改变索引时,我手动调用UITabBarControllerDelegatedidSelectViewController委托方法。

问题是,当我想检查哪个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。谢谢你的帮助!

我认为你的问题是你在通知方法中创建了cameraViewController的新实例,而不是获得已经与选项卡栏控制器相关联的实例。同样,不需要调用委托方法,只需要这样做:

-(void) notifmethod{
    UINavigationController *nav = self.tabBarController.viewControllers[2];
    [nav popToRootViewControllerAnimated:NO];
}

我假设你是从一个标签栏控制器的视图控制器调用这个,所以我使用self。tabbarcontroller。如果这不是真的,那么您将不得不更改该引用。

最新更新