Как правильно перейти от navigationController к tabBarController со своими навигационными контроллерами - PullRequest
1 голос
/ 10 июля 2010

Привет, ребята,

У меня общая проблема с дизайном приложения для iPhone.Я хочу знать основной принцип, как перейти от обычного представления с navigationController к tabBarController с вкладками, где каждая вкладка имеет свой собственный navigationController (больше не нужен первый navigationController).

Позвольте мне показать вам, как я сделал это:

Сначала я добавил некоторое представление с помощью кнопки в навигационный контроллер.AppDelegate добавляет этот navigationController (с контроллером представления, конечно) в качестве subView к окну:

[window addSubview:navigationController.view];

Когда я добираюсь до этого нового представления (с навигационным контроллером сверху), я нажимаю кнопку, которая переводит меня в новое представление, которое имеетtabBarController (со своими собственными navControllers):

SearchViewController *searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchView_iPhone" bundle:nil];
searchViewController.tabBarItem.title = @"FirstTab";
UINavigationController *searchNavigationController = [[UINavigationController alloc] initWithRootViewController:searchViewController];

SettingsViewController *settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsView_iPhone" bundle:nil];
settingsViewController.tabBarItem.title = @"SecondTab";
UINavigationController *settingsNavigationController = [[UINavigationController alloc] initWithRootViewController:settingsViewController];

//Add navigation controllers to tabBar controller
tabBarController = [[UITabBarController alloc] init];
tabBarController.viewControllers = [NSArray arrayWithObjects:searchNavigationController, dictionariesNavigationController, settingsNavigationController, nil];

Хорошо, я добавил все представления (с navControllers) в tabBarController.Все, что мне нужно сделать, это нажать tabBarController, чтобы увидеть:

[self.navigationController pushViewController:tabBarController animated:YES];

Но после этого я вижу, что navigationController из первого представления все еще присутствует в представлениях с tabBars.Это логично, потому что я нажал tabBarController с навигацией.Поэтому я сделал это, чтобы скрыть это:

self.navigationController.navigationBarHidden = YES;

Теперь все выглядит хорошо.Все представления tabBar имеют свой собственный navController.

ОСНОВНАЯ ПРОБЛЕМА: Когда я хочу выдвинуть другое представление (settingsResultsViewController) из таблицы с просмотром (settingsTableViewCell), которая находится в settingsViewController, ничего не происходит.Вот код:

SettingsResultsViewController *settingsResultsViewController = [[SettingsResultsViewController alloc] initWithNibName:@"SettingsResultsView_iPhone" bundle:nil];
[self.navigationController pushViewController:settingsResultsViewController animated:YES];

Я также пытался выдвинуть это представление с помощью appDelegate следующим образом:

[delegatePhone.settingsViewController.navigationController pushViewController:settingsResultsViewController animated:YES];
[delegatePhone.firstViewController.navigationController pushViewController:settingsResultsViewController animated:YES];

Но опять ничего не происходит.

Я предполагаю, чтоОсновная проблема в навигационных контроллерах.Первый navigationController все еще находится где-то сзади, в то время как я хочу нажать текущим navController на этом конкретном tabBar.

Есть ли способ выдвинуть новое представление (tabBarController в моем случае) из первого представления, отличное от navigationController?

Все, что я хочу, это когда кнопка на firstView - это щелчок, и приложение выводит меня на tabBarController и вообще забывает о firstView (и first navigationController) - они мне больше не нужны.

Надеюсь, ядал понять.

Спасибо за вашу помощь.Я действительно ценю это.

Ответы [ 2 ]

0 голосов
/ 11 июля 2010

Автор Tweetie некоторое время назад прокомментировал тему, касающуюся панелей вкладок и контроллеров нефа.Помогает ли этот поток?

Контроллер панели вкладок внутри контроллера навигации или общий доступ к корневому представлению навигации

0 голосов
/ 10 июля 2010

Вы можете отобразить контроллер панели вкладок, вызвав presentModalViewController:animated: вместо того, чтобы помещать его в стек навигации. И если вам вообще не нужен первый навигационный контроллер, вам, вероятно, следует заменить его на стандартный контроллер представления.

...