Нажмите на кнопку на панели навигации, чтобы узнать больше. NavigationController - PullRequest
0 голосов
/ 09 апреля 2010

Хорошо, вот моя проблема: мое приложение отображает категории в панели вкладок в нижней части экрана iPhoneOS.Это позволяет только 5 категорий, прежде чем он представляет кнопку БОЛЬШЕ.У меня есть более 25 (пожалуйста, не отвечайте на это, говоря: «Пересмотрите свою заявку ... и т. Д.» - это было грубо сказано ранее. Они относятся к категории продуктов питания, напитков и т. Д. И не могут быть изменены).Я хочу разрешить пользователю размещать свои любимые на главной странице.Система редактирования Apple moreNavigationController позволяет переставлять только 20 элементов панели вкладок из-за нехватки места на странице редактирования.Этого недостаточно, поэтому мне нужно реализовать свой собственный экран редактирования.Я установил rightBarButtonItem на ноль и создал свой собственный.Используя NSLog, я вижу, что "щелчок" происходит при нажатии кнопки РЕДАКТИРОВАТЬ, но я не могу использовать pushViewController.Ничего не произошло.Я думаю, что это как-то связано с навигационным контроллером, к которому я обращаюсь ... но я не уверен.PS: все это происходит в моем приложении делегата, который действует как UITabBarControllerDelegate и UINavigationControllerDelegate.

Я попытался сделать следующее:

 - ( void )navigationController:( UINavigationController * )navigationController_local willShowViewController:( UIViewController * )viewController_local animated:( BOOL )animated
{

    UIViewController * currentController = navigationController_local.visibleViewController;
    UIViewController * nextController = viewController_local;

 // Do whatever here.
 NSLog(@"Nav contoller willShowViewController fired\n'%@'\n'%@'\nThere are currently: %d views on the stack\n",currentController,nextController,[self.navigationController.viewControllers count]);

 if ( [nextController isKindOfClass:NSClassFromString(@"UIMoreListController")])
 {
  UINavigationBar *morenavbar = navigationController_local.navigationBar;
  UINavigationItem *morenavitem = morenavbar.topItem;
  morenavitem.rightBarButtonItem = nil;
  NSLog(@"Is a UIMoreListController\n");

  UIBarButtonItem *editTabBarButton = [[UIBarButtonItem alloc]
             initWithTitle:@"Edit"
             style:UIBarButtonItemStylePlain
             target:self
             action:@selector(editTabBar:)];

  morenavitem.rightBarButtonItem = editTabBarButton;
  [editTabBarButton release];
 }


}

Это работает, чтобы поместить кнопку EDIT вверхсправа от экрана - имитируя внешний вид Apple ... но когда эта кнопка нажата, вы не можете выйти из проклятого moreNavigationController.

Я пробовал много вещей.UIAlerts работают и т. Д. ... но выдвигать (или извлекать - даже выдвигать в корневую панель) контроллер представления в стеке - нет.

- (void) editTabBar:(id)sender {
 NSLog(@"clicked edit tabbar\n");
 NSLog(@"Total count of controllers: %d\n",[self.navigationController.viewControllers count]);

 TabBarViewController *tabBarViewController2 = [[TabBarViewController alloc] initWithNibName:@"TabBarView" bundle:nil];
  tabBarViewController2.navigationItem.title=@"Edit Tab Bar";
  [self.navigationController pushViewController:tabBarViewController2 animated:YES];
  [tabBarViewController2 release];

NSLog(@"finished edit tabbar\n");

}

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

это тоже странно.В функции редактирования, если я просто делаю это:

- (void) editTabBar:(id)sender {
self.tabBarController.selectedIndex = 0;
}

Это возвращает меня домой (к tabbarcontroller 0)

НО это делает:

 - (void) editTabBar:(id)sender {
    [self.navigationController popToRootViewControllerAnimated:YES];
    }

не делаетработа.

Имеет ли moreNavigationController какое-то особое качество, которое связывает с остальной частью системы?

Ответы [ 2 ]

2 голосов
/ 09 апреля 2010

Я бы попробовал переопределить всю функциональность "Больше" с нуля. Другими словами, сохраните четыре домашние вкладки в пользовательских настройках по умолчанию и добавьте фиктивную пятую вкладку, которая переключается на вашу собственную полную реализацию стека контроллера большего количества представлений.

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

0 голосов
/ 09 апреля 2010

UITabBarController - зло, поэтому я не удивлюсь, если у MoreController тоже будут какие-то особые свойства.

Я успешно перехватил контроллер More в shouldSelectViewController для изменения источника данных; вы можете найти там обходной путь.

PS Я склонен согласиться с тем, что вы могли бы подумать о редизайне своего приложения, чтобы вам не требовалось неограниченное количество контроллеров представления, прикрепленных к панели вкладок только для выбора категорий; Вам, возможно, повезет больше, если использовать панель инструментов с одним прокручиваемым настраиваемым видом. Если это действительно лучший способ выбора категорий для вашего приложения, конечно.

...