Поскольку контроллер панели вкладок представляет собой контроллер представления контейнера, который используется для разделения приложения на два или более различных режима работы, большинство приложений имеют контроллеры навигации в качестве дочерних элементов контроллеров панели вкладок.
Позиция Apple такова:
Вы используете контроллеры панели вкладок в
ситуации, когда ваше приложение
либо представлены разные типы
данные или представляет те же данные в
существенно разные способы.
Это не значит, что вы не можете делать что-то по-другому ... Главный вопрос, который у вас есть, заключается в том, что вы уже поместили Nav Controller в приложение и хотите программно создать контроллер панели вкладок. Поэтому я могу видеть это только потому, что вы не возражаете, если контроллер вкладок меняется каждый раз, когда вы меняете экраны в контроллере Nav. Некоторые приложения работают таким образом. Большинство нет.
Если мои предположения выше верны, я бы посоветовал вам переосмыслить свой код, чтобы понять, хотите ли вы продолжить эту линию разработки. Если это так, вы можете легко создать контроллер панели вкладок и прикрепить его в текущем представлении.
Вот код, который я использую для создания настроек для одного из моих приложений:
// set up a local nav controller which we will reuse for each view controller
UINavigationController *localNavigationController;
// create tab bar controller and array to hold the view controllers
UITabBarController *tabBarController = [[UITabBarController alloc] init];
NSMutableArray *localControllersArray = [[NSMutableArray alloc] initWithCapacity:1];
// setup the first view controller (Root view controller)
RootViewController *myViewController;
myViewController = [[RootViewController alloc] initWithTabBar];
// create the nav controller and add the root view controller as its first view
localNavigationController = [[UINavigationController alloc] initWithRootViewController:myViewController];
localNavigationController.navigationBar.barStyle = UIBarStyleBlack;
localNavigationController.delegate = self;
[localControllersArray addObject:localNavigationController];
// release since we are done with this for now
[localNavigationController release];
[myViewController release];
tabBarController.viewControllers = localControllersArray;
tabBarController.moreNavigationController.navigationBar.barStyle = UIBarStyleBlack;
tabBarController.delegate = self;
tabBarController.moreNavigationController.delegate = self;
// release the array because the tab bar controller now has it
[localControllersArray release];
self.tabBarController.selectedIndex = 0;
// add the tabBarController as a subview in the window
[window addSubview:tabBarController.view];
// need this last line to display the window (and tab bar controller)
[window makeKeyAndVisible];
Есть так много ситуаций, когда я чувствую, что проще сделать все программно.
Надеюсь, это поможет.