我在我的应用程序中的tabview有一个相当大的问题。我的问题是,我在标签栏中间使用一个自定义UIButton,然后当我改变索引时,我手动调用UITabBarControllerDelegate
的didSelectViewController
委托方法。
问题是,当我想检查哪个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。如果这不是真的,那么您将不得不更改该引用。