我有一个标签栏控制器,它有4个标签,我想:当点击第4个标签(虚拟视图控制器)时,它将显示一个新的视图控制器而不显示虚拟VC。
这是我的代码:
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
NSLog(@"called");
AskQuestionViewController *AQVC = [[AskQuestionViewController alloc]initWithNibName:@"AskQuestionViewController" bundle:nil];
if (viewController == [tabBarController.viewControllers objectAtIndex:3])
{
[self presentViewController:AQVC animated:YES completion:nil];
return NO;
}
return YES;
}
在我的viewDidLoad方法中,我确实设置了委托。self.tabBarController.delegate = self;
答案 0 :(得分:22)
因为这个类是tabBarController,显然UITabBarController类没有名为tabBarController的属性。
所以我只需将self.tabBarController.delegate = self
设置为self.delegate = self
答案 1 :(得分:0)
您需要使用:
print(clusters)
告诉代表用户在标签栏中选择了一个项目。
- (void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController
询问委托是否应使指定的视图控制器处于活动状态。
答案 2 :(得分:0)
任何对 UITabBarController
委托 Hero 有问题的人。问题在于 Hero
转换委托,解决方案是将您的 tabBarController 作为 ViewController
放在 container
中。然后在容器上设置 Hero
并解决问题。
tabBarController.viewControllers = [...]
let container = UIViewController()
container.addChild(tabBarController)
container.view.addSubview(tabBarController.view)
tabBarController.didMove(toParent: container)
tabBarController.view.frame = CGRect(x: 0, y: 0, width: container.view.frame.width, height: container.view.frame.height)
container.modalPresentationStyle = .fullScreen
container.hero.isEnabled = true
container.modalAnimationType = .slide(direction: .left)
rootViewController.present(container, animated: true, completion: nil)