UITableViewController без UITabBarController не отображается - PullRequest
0 голосов
/ 19 марта 2009

Я попал в интересную ситуацию, у меня есть приложение для iPhone с 3 UITableViewController с, каждый из которых отображает более или менее одинаковые данные (можно сказать, что это вопрос фильтрации). На сегодняшний день у меня было 3 отдельных NIB для этого, каждый со своим собственным контроллером, кроме того, UITableViewController были внутри UINavigationController ради кнопок сверху.

Теперь, чтобы оптимизировать приложение и уменьшить его занимаемую площадь, я упаковал всю логику в один общий контроллер (UITableViewController) и оставил только один NIB на месте. Общий контроллер позаботится о фильтрации данных и указании на правильные данные.

Итак, я загружаю такой же общий контроллер на 3 из навигационных контроллеров:

navControllerA = [[UINavigationController alloc] initWithRootViewController: commonTableController];

и добавил эти контроллеры навигации в UITabBarController:

navigationControllersArray = [NSArray arrayWithObjects: navControllerA, navControllerB, navControllerC, nil];
[tabController setViewControllers:[NSArray arrayWithArray:navigationControllersArray]];

Теперь все в порядке, отображаются вкладки, отображаются таблицы. Но как только вы дотронетесь до следующего UITabBarItem и вернетесь к предыдущему, которое UITableViewController не показывает, вы сможете увидеть только UIWindow на его месте. UITableViewController остается видимым только для последних нажатых UITabBarItem.

Существует ли какой-то механизм загрузки вида UITabBar, о котором я не знаю?

Ответы [ 3 ]

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

Каждый контроллер представления может быть только в стеке одного контроллера навигации, и он не может быть в нескольких местах в этом стеке.

Если вы действительно хотите сэкономить память, используя только один контроллер представления, я бы предложил вместо использования контроллера панели вкладок просто использовать представление панели вкладок и установить свой корневой контроллер представления в качестве его делегата. Затем контроллер корневого представления будет напрямую интерпретировать события панели вкладок и соответственно изменять свою фильтрацию.

0 голосов
/ 01 апреля 2009

Использование UITabbarController внутри UINavigationController не поддерживается. Вы можете написать обычный UIViewController для имитации UITabbbarController, который может быть передан для просмотра стека. Смотрите этот ТАК вопрос .

0 голосов
/ 21 марта 2009

Если вы действительно хотите переключать наборы данных в одном представлении, похоже, что лучше использовать панель инструментов, а не панель вкладок. Панель вкладок предназначена для переключения видов, где, как заметил другой участник, все виды должны быть дочерними элементами одного вида и одного контроллера навигации. Наличие панели вкладок, которая вызывает этот единственный контроллер для переключения наборов данных, имеет больше смысла, иначе использование UISegmentedControl также будет работать хорошо (поскольку у вас есть три элемента и вы можете иметь только до трех сегментов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...