2009-10-09 2 views
3

У меня возникла проблема, когда мой UINavigationBar не выталкивает его, когда UINavigationController выдает контроллер вида.UINavigationController не выталкивает элементы UINavigationBar

Я имел взгляд на штабеля наблюдается следующее:

  • Ожидаемое количество контроллеров навигации, выделенных (проверено в документах)
  • Есть правильное количество контроллеров в стеке. (отладочный журнал)
  • Элементы навигации не отображаются. (отладочный журнал)

Вот что я сделал.

Я вынул несколько операторов журнала в метод viewDidLoad после вызова super.

NSLog(@"%@", [self navigationController]); 
NSLog(@"%@", [[self navigationController] viewControllers]); 
NSLog(@"%@", [[self navigationController] navigationBar]); 
NSLog(@"%@", [[[self navigationController] navigationBar] items]); 

После загрузки первоначального изображения.

2009-10-09 16:42:51.706 Bob[11657:207] <UINavigationController: 0x243bb0> 
2009-10-09 16:42:51.720 Bob[11657:207] (
    <MediaBrowser: 0x2354c0> 
) 
2009-10-09 16:42:51.742 Bob[11657:207] <UINavigationBar: 0x243e50; frame = (0 20; 320 44); autoresize = W; layer = <CALayer: 0x243ed0>> 
2009-10-09 16:42:51.758 Bob[11657:207] (
    <UINavigationItem: 0x242d60> 
) 

Все выглядит хорошо. Нажмите второй контроллер.

2009-10-09 16:43:11.800 Bob[11657:207] -[MediaBrowser beginLoading] [Line 261] 
2009-10-09 16:43:12.320 Bob[11657:207] -[MediaBrowser loadingComplete] [Line 269] 
2009-10-09 16:43:12.587 Bob[11657:207] <UINavigationController: 0x243bb0> 
2009-10-09 16:43:12.654 Bob[11657:207] (
    <MediaBrowser: 0x2354c0>, 
    <MediaBrowser: 0x2c1cc0> 
) 
2009-10-09 16:43:12.685 Bob[11657:207] <UINavigationBar: 0x243e50; frame = (0 20; 320 44); autoresize = W; layer = <CALayer: 0x243ed0>> 
2009-10-09 16:43:12.734 Bob[11657:207] (
    <UINavigationItem: 0x242d60>, 
    <UINavigationItem: 0x2c63b0> 
) 

Снова ничего неожиданного здесь. Нажмите третий контроллер.

2009-10-09 16:43:19.934 Bob[11657:207] -[MediaBrowser beginLoading] [Line 261] 
2009-10-09 16:43:20.388 Bob[11657:207] -[MediaBrowser loadingComplete] [Line 269] 
2009-10-09 16:43:20.928 Bob[11657:207] <UINavigationController: 0x243bb0> 
2009-10-09 16:43:20.962 Bob[11657:207] (
    <MediaBrowser: 0x2354c0>, 
    <MediaBrowser: 0x2c1cc0>, 
    <MediaBrowser: 0x4027e20> 
) 
2009-10-09 16:43:21.003 Bob[11657:207] <UINavigationBar: 0x243e50; frame = (0 20; 320 44); autoresize = W; layer = <CALayer: 0x243ed0>> 
2009-10-09 16:43:21.039 Bob[11657:207] (
    <UINavigationItem: 0x242d60>, 
    <UINavigationItem: 0x2c63b0>, 
    <UINavigationItem: 0x4028880> 
) 

Все в порядке. Теперь давайте поп-контроллер

2009-10-09 16:43:26.935 Bob[11657:207] <UINavigationController: 0x243bb0> 
2009-10-09 16:43:26.945 Bob[11657:207] (
    <MediaBrowser: 0x2354c0>, 
    <MediaBrowser: 0x2c1cc0> 
) 
2009-10-09 16:43:26.964 Bob[11657:207] <UINavigationBar: 0x243e50; frame = (0 20; 320 44); autoresize = W; layer = <CALayer: 0x243ed0>> 
2009-10-09 16:43:26.977 Bob[11657:207] (
    <UINavigationItem: 0x242d60>, 
    <UINavigationItem: 0x2c63b0>, 
    <UINavigationItem: 0x4028880> 
) 

Humm. Что-то идет не так. Контроллер выскочил, но элемент навигации все еще там. Для хихиканья позволяет снова нажать.

009-10-09 16:44:05.878 Bob[11657:207] <UINavigationController: 0x243bb0> 
2009-10-09 16:44:05.908 Bob[11657:207] (
    <MediaBrowser: 0x2354c0>, 
    <MediaBrowser: 0x2c1cc0>, 
    <MediaBrowser: 0x407eb00> 
) 
2009-10-09 16:44:05.951 Bob[11657:207] <UINavigationBar: 0x243e50; frame = (0 20; 320 44); autoresize = W; layer = <CALayer: 0x243ed0>> 
2009-10-09 16:44:05.996 Bob[11657:207] (
    <UINavigationItem: 0x242d60>, 
    <UINavigationItem: 0x2c63b0>, 
    <UINavigationItem: 0x4028880>, 
    <UINavigationItem: 0x407f280> 
) 

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

2009-10-09 16:44:17.770 Bob[11657:207] <UINavigationController: 0x243bb0> 
2009-10-09 16:44:17.776 Bob[11657:207] (
    <MediaBrowser: 0x2354c0>, 
    <MediaBrowser: 0x2c1cc0> 
) 
2009-10-09 16:44:17.785 Bob[11657:207] <UINavigationBar: 0x243e50; frame = (0 20; 320 44); autoresize = W; layer = <CALayer: 0x243ed0>> 
2009-10-09 16:44:17.793 Bob[11657:207] (
    <UINavigationItem: 0x242d60>, 
    <UINavigationItem: 0x2c63b0>, 
    <UINavigationItem: 0x4028880>, 
    <UINavigationItem: 0x407f280> 
) 

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

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

Если вы получили это, спасибо. Мысли о том, где я мог бы пойти отсюда, были бы оценены.

ответ

3

Прибита гвоздем.

Получается, что I делал что-то глупое.

Я добавил метод pop во внутреннюю категорию в NSMutableArray. Этот метод не срабатывал правильно. UINavigationBar также должен добавить поп-метод в NSMutableArray. Моя багги выиграла и сломала популярность UIBarItem.

+1

Еще одна демонстрация того, почему методы категорий должны быть пропущены через префикс. Например, вы можете назвать свой метод категории '- (id) kevinsapp_pop' вместо' - (id) pop'. Подобная проблема с пространством имен может возникать, когда вы используете классы подкласса. –