Приложение на основе навигации с TabBar

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

Ответов (3)

Basically What you need to do is push a Tab View Controller onto the Navigation Controller's viewcontroller stack.

Начнем со свежего шаблона «Приложение на основе навигации». Я добавил в 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 :).

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

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

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

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

Так что, скорее всего, это будет противоречить руководящим принципам взаимодействия с пользователем, и вас могут отвергнуть.

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

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

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

  • (void) pushViewController: (UIViewController *) viewController анимированный: (BOOL) анимированный

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

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

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

-JP