Как добавить NavigationController в существующее приложение tab?

#iphone #objective-c #uinavigationcontroller #uitabbarcontroller

#iPhone #objective-c #uinavigationcontroller #uitabbarcontroller

Вопрос:

У меня есть приложение для iPhone с 2 вкладками. Это делегат моего приложения:

  (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
// Override point for customization after application launch.
// Add the tab bar controller's current view as a subview of the window
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
 }
  

Моя первая вкладка является подклассом UITableViewController . Я хотел бы запустить новый контроллер просмотра, когда кто-то нажимает на строку моей таблицы. Я знаю, что это делается didSelectRowAtIndexPath следующим образом:

 TableViewDetailViewController *fvController = [[TableViewDetailViewController alloc] initWithNibName:@"TableViewDetailViewController" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:fvController animated:YES];
    [fvController release];
    fvController = nil;
  

Мое значение self.navigationController равно нулю, поэтому ничего не попадает в стек просмотра. Где я должен создать свой NavigationController, чтобы было как можно меньше кода для изменения?

Ответ №1:

У нас есть прямое решение с использованием Interface Builder.

В Interface Builder перейдите к тому, xib в который вы добавили tabBarController , и удалите тот, tabBarItem с которым вы подключили свой tableViewController .

Теперь перетащите UINavigationController из библиотеки в свой tabBar и установите это navigationController rootViewController как свое tableViewController .

Спасибо

Ответ №2:

Вместо того, чтобы устанавливать свой TableViewDetailViewController в качестве одного из контроллеров просмотра ваших вкладок, вы должны создать UINavigationController для каждой вкладки на вашей панели вкладок. Затем поместите свой TableViewDetailViewController в соответствующее UINavigationController . в этом случае self.navigationController будет указывать на действительный UINavigationController .