我的应用程序中的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
。谢谢你的帮助!
答案 0 :(得分:2)
我认为您的问题是您在notifmethod中创建了一个新的cameraViewController实例,而不是获取已经与标签栏控制器关联的实例。此外,没有必要调用委托方法,但是这样做:
-(void) notifmethod{
UINavigationController *nav = self.tabBarController.viewControllers[2];
[nav popToRootViewControllerAnimated:NO];
}
我假设你是从一个标签栏控制器的视图控制器调用它,所以我使用self.tabBarController。如果不是这样,那么你必须改变那个参考。