Приложение для навигации с TabBar - PullRequest
3 голосов
/ 01 марта 2009

У меня есть приложение на основе навигации, которое показывает TableView, где вы можете выбрать ячейку, и оно приводит вас к «Detail View» для этой ячейки. Я хочу, чтобы в этом представлении была вкладка, где я могу выбирать между 3 подпредставлениями. Я нашел несколько решений в Интернете для этого, но ни одно из них не очень полезно. Есть ли учебник для этого конкретно или их исходный код указывает, как это можно сделать? Спасибо

Ответы [ 3 ]

6 голосов
/ 01 марта 2009

По сути, вам нужно вставить контроллер представления вкладок в стек контроллера контроллеров навигации.

Начиная со свежего шаблона "Навигационное приложение". Я добавил следующий метод в RootViewController.m:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Navigation logic may go here. Create and push another view controller.
UIViewController *viewOneViewController =   [[UIViewController alloc] init];
viewOneViewController.title = @"One";
viewOneViewController.view.backgroundColor = [UIColor redColor];

UIViewController *viewTwoViewController =   [[UIViewController alloc] init];
viewTwoViewController.title = @"Two";
viewTwoViewController.view.backgroundColor = [UIColor orangeColor];

UIViewController *viewThreeViewController = [[UIViewController alloc] init];
viewThreeViewController.title = @"Three";
viewThreeViewController.view.backgroundColor = [UIColor greenColor];

UITabBarController *anotherViewController = [[UITabBarController alloc] init];
anotherViewController.viewControllers = [NSArray arrayWithObjects:viewOneViewController, viewTwoViewController, viewThreeViewController, nil];
[self.navigationController pushViewController:anotherViewController animated:YES];
[anotherViewController release];

}

Изменил это на 25, чтобы проверить:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 25;
}

Теперь, когда я буду строить и запускать, я посмотрю, что вы ищете, в основном. После того, как вы начнете работать, вы захотите изменить UIViewControllers на пользовательские подклассы, которые вы создаете для хранения кода для каждого представления. (Если вы также используете Interface Builder, измените init на initWithNibNamed:).

Надеюсь, это поможет вам немного продвинуться.

2 голосов
/ 01 марта 2009

Вы должны знать, что Apple может отклонить ваше приложение, если вы сделаете это.

Из «Объединения панели вкладок и контроллеров навигации»

Очень часто объединяют панель вкладок и контроллеры навигации, как показано на рисунке 4. Для этого вы просто добавляете контроллеры навигации в контроллер панели вкладок (однако вы никогда не должны добавлять контроллер панели вкладок в навигационный контроллер).

Так что, скорее всего, это противоречит принципам человеческого интерфейса, и поэтому вы можете быть отклонены.

1 голос
/ 02 марта 2009

Я пытаюсь сделать то же самое. Приложение «Tweetie» делает что-то похожее. У них есть TableView счетов, а затем вы выбираете учетную запись, и появляется TabBar.

В любом случае, прямо из документации Apple:

pushViewController: анимированные: Помещает контроллер представления в стек приемника и обновляет дисплей.

  • (void) pushViewController: (UIViewController *) viewController animated: (BOOL) animated

Параметры ViewController Контроллер представления, который помещается в стек. Он не может быть экземпляром контроллера панели вкладок. Этот метод ничего не делает, если контроллер представления уже находится в стеке.

анимированные Установите это значение в YES, чтобы оживить переход. Передайте NO, если вы настраиваете навигационный контроллер до его отображения.

Так, может быть, мы просто застряли, используя TabBar, а не TabBarController?

-JP

...