简体   繁体   中英

UITabBarControllerDelegate method not getting called

I have a tab bar controller which has 4 tabs, I want: when tap the 4th tab(a dummy viewcontroller), it will present a new viewcontroller without showing the dummy VC.

here is my code:

- (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;
}

and in my viewDidLoad method, i did set the delegate. self.tabBarController.delegate = self;

however, for some reason, this method is not being called. can anyone help?

because this class is a tabBarController , clearly a UITabBarController class doesn't have a property called tabBarController .

So I just changed self.tabBarController.delegate = self to self.delegate = self

You need to use:

- (void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController

Tells the delegate that the user selected an item in the tab bar.

- tabBarController:shouldSelectViewController:

Asks the delegate whether the specified view controller should be made active.

Anyone who had the issue with UITabBarController delegate with Hero . the problem is with Hero transition delegate and solution is to put your tabBarController in a ViewController as a container . Then setup Hero on the container and problem solves.

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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM