Say you’ve got a uitabbarcontroller and you want to programatically switch from one to the other. Here’s how you do it:

- (IBAction)test:(id)sender {
    // switch back
    int controllerIndex = 1;
    UITabBarController *tabBarController = self.tabBarController;
    UIView * fromView = tabBarController.selectedViewController.view;
    UIView * toView = [[tabBarController.viewControllers objectAtIndex:controllerIndex] view];
    // Transition using a page curl.
    [UIView transitionFromView:fromView 
                       options:(controllerIndex > tabBarController.selectedIndex ? UIViewAnimationOptionTransitionCurlUp : UIViewAnimationOptionTransitionCurlDown)
                    completion:^(BOOL finished) {
                        if (finished) {
                            tabBarController.selectedIndex = controllerIndex;

The controller index is the view you want to transition to (0 based). So you just pick your index, get your from and to view, and then use the transitionFromView method to switch.

Note: You can’t do this from within a viewWillAppear or other lifecyle event. You may get away with it, but it only works once your view is fully loaded.

Helper link: