UITabBarControllerDelegate方法未被调用

时间:2015-07-24 13:25:33

标签: ios objective-c iphone uitabbarcontroller

我有一个标签栏控制器,它有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;

但是,出于某种原因,此方法未被调用。 有人可以帮忙吗?

3 个答案:

答案 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)