Вы должны добавить экземпляр UINavigationController
к UITabBarController
, а затем добавить контроллер табличного представления к свойству rootViewController
экземпляра UINavigationController
, что должно значительно облегчить вашу жизнь.
В качестве простого примера этого создайте пустое оконное приложение (шаблоны делают это намного более запутанным, чем на самом деле).
Добавьте свои подклассы UIViewController/UITableViewController
в проект, а затем используйте этот код в качестве руководства для настройки вашего проекта. Этот код находится в вашем классе AppDelegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// create our table view controller that will display our store list
StoresViewController *storeListController = [[StoresViewController alloc] init];
// create the navigation controller that will hold our store list and detail view controllers and set the store list as the root view controller
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:storeListController];
[navController.tabBarItem setTitle:@"TableView"];
[navController.tabBarItem setImage:[UIImage imageNamed:@"cart.png"]];
// create our browser view controller
BrowserViewController *webBrowserController = [[BrowserViewController alloc] init];
[webBrowserController.tabBarItem setTitle:@"WebView"];
[webBrowserController.tabBarItem setImage:[UIImage imageNamed:@"web.png"]];
// add our view controllers to an array, which will retain them
NSArray *viewControllers = [NSArray arrayWithObjects:navController, webBrowserController, nil];
// release these since they are now retained
[navController release];
[storeListController release];
[webBrowserController release];
// add our array of controllers to the tab bar controller
UITabBarController *tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:viewControllers];
// set the tab bar controller as our root view controller
[self.window setRootViewController:tabBarController];
// we can release this now since the window is retaining it
[tabBarController release];
[self.window makeKeyAndVisible];
return YES;
}
В приведенном выше примере кода BrowserViewController
является подклассом UIViewController
, а класс StoresViewController
является подклассом UITableViewController
. Экземпляры UITabBarController
и UINavigationController
создаются программно и добавляются в окно.
Используя подклассы UITableViewController
класса, вы избавляетесь от необходимости создавать экземпляр UITableView
программно и получаете практически все, что вам нужно, из коробки.
Когда вам нужно поместить подробный вид в стек экземпляра UINavigationController
, вы просто должны использовать что-то подобное:
[self.navigationController pushViewController:YourDetailViewControllerInstance animated:YES];
Это добавит подробный подкласс вида UIViewController
к иерархии вида экземпляра UINavigationController
для вас и оживит переход.
В этом много контроллеров, но оно того стоит и позволит избежать многих проблем, с которыми вы сталкиваетесь, так как этот метод позволяет представлениям управлять изменением размера и учитывать панели инструментов / панели навигации самостоятельно.