Я пытаюсь написать приложение, которое использует панель навигации и панель вкладок, что (я собираю) необычным образом.
По сути, у меня есть несколько «страниц» («home», «settings» и т. Д.), Каждая из которых имеет свою вкладку. Я также хотел бы, чтобы "домашняя" страница была корневым представлением панели навигации, а другие страницы - представлениями второго уровня панели навигации. То есть я должен иметь возможность переходить на любую страницу, щелкая соответствующий элемент панели вкладок, и иметь возможность переходить на домашнюю страницу с любой другой страницы, нажимая кнопку назад на панели навигации.
В настоящее время у меня есть UINavigationBar (через UINavigationController) и UITabBar (через UITabController) как дочерние элементы UIView. Контроллеры представления различных страниц задаются в качестве свойства viewControllers
контроллера вкладок, а контроллер домашней страницы также устанавливается в качестве корневого представления контроллера навигации. Каждый тег просмотра страницы имеет свой индекс в элементе управления вкладкой. У меня есть следующая логика в методе делегата didSelectViewController
контроллера вкладок:
- (void) tabBarController:(UITabBarController*) tabBarController
didSelectViewController:(UIViewController*) viewController
{
if ([navController.viewControllers count] > 1)
[navController popViewControllerAnimated:NO];
[navController pushViewController:viewController animated:YES];
}
Кроме того, в методе делегата didShowViewController
контроллера навигации у меня есть следующий код:
- (void) navigationController:(UINavigationController *) navigationController
didShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
{
tabController.selectedIndex = viewController.view.tag;
}
Проблема, которая возникает, заключается в том, что когда я запускаю это, панель навигации, панель вкладок и домашняя страница отображаются нормально, но панель вкладок не реагирует на ввод - я не могу выбрать другую вкладку.
Я так понял, что более привычно иметь панель вкладок как дочерний элемент управления навигацией, или наоборот. Кажется, это не соответствует моему подходу, потому что я не хочу индивидуально создавать подчиненный элемент управления каждый раз, когда происходит изменение в родительском элементе управления, например: заново создавать панель вкладок при каждом изменении панели навигации.
У кого-нибудь есть предложения относительно того, что не так и как это исправить? Я, наверное, упускаю что-то очевидное, но что бы то ни было, я не могу найти это. Спасибо!
РЕДАКТИРОВАТЬ: Я предполагаю, что это как-то связано с тем, что оба контроллера пытаются владеть контроллером страницы, но я не могу найти решение этой проблемы.