UIWindow не справляется, если вы пытаетесь поместить в него представления двух контроллеров представления: только последний получит соответствующие обратные вызовы, и они не будут знать друг о друге. (Я сделал это намеренно, когда мне нужен постоянный анимированный фон за прозрачным набором представлений, но это сложно.) В ios4 это более явно: UIWindow имеет свойство rootViewController, которое содержит ВК для окна.
Здесь вам нужен контроллер панели вкладок , содержащий контроллеров навигации, по одному на вкладку, каждый из которых содержит один из ваших пользовательских VC.
вроде как: (это без манжеты и не проверено, так что следите за ошибками)
PersonListViewController* plvc = [[[PersonListViewController alloc]
initWithNibName:@"PersonListViewController"
bundle:nil]
autorelease];
UINavigationController *uinc = [[[UINavigationController alloc]
initWithRootViewController:plvc]
autorelease];
// ... make more VCs for any other tab pages here
UITabBarController* tbc = [[[UITabBarController alloc] init] autorelease];
[tbc setViewControllers:[NSArray arrayWithObjects: uinc, nil]]; // *1
/* iOS 4 and later, preferred: */
[window setRootViewController:tbc];
/* or, alternatively, in iOS 3:
[window addSubview:[tbc view]];
[self setMyMainTabsController:tbc]; // must keep an owning reference or it'll get released
*/
[window makeKeyAndVisible];
в * 1, добавьте любые VC для других вкладок в список.
Размещение контроллеров навигации внутри контроллера вкладок вполне законно и одобрено Apple. Помещать контроллеры вкладок в навигационные контроллеры нельзя, хотя это может работать в ограниченных случаях.