You can do this with a TabBarController, too.
When you set up your TabBarController, the various sub-ViewControllers are stored in an array (0-based, of course). If you have four ViewControllers, and you're on the second one and you want to switch to the third one, I believe you can do:
Code:
[[self parentViewController] setSelectedIndex:3];
This is untested, but it should work.
However, ask yourself: Is this really the design paradigm that I want? TabBars are for separating sections of your application by functionality. Take a look at the Clock app. A world clock has a different purpose than an Alarm clock, which are both different from stopwatches and timers. Hence, it's a TabBar.
Contrast this with the Calendar application, where things are done with a NavigationController. This is because the logic flows from one section to the next. Tapping the "Add" button brings up a screen that present a visual logic flow. It's something that would clearly not work as well with a TabBarController.
HTH,
Dave