2009-10-09 96 views
3

我遇到問題,當UINavigationController彈出視圖控制器時,我的UINavigationBar沒有彈出它的項目。UINavigationController不會彈出UINavigationBar項目

我有看棧觀察到以下:

  • 預期數量分配的導航控制器(在儀器檢查)
  • 有堆棧上的控制器的正確數目。 (調試日誌記錄)
  • 導航項目未被彈出。 (調試日誌記錄)

這就是我所做的。

我調用super後,彈出了一些日誌語句到viewDidLoad方法。

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屬性)一個自定義rightBarItem。

如果你有這麼遠,謝謝。我很想知道我可以從哪裏去的想法。

回答

3

釘住它。

所以事實證明,做了一些愚蠢的事情。

我已經在NSMutableArray的內部類中添加了一個pop方法。該方法沒有正確彈出。 UINavigationBar還必須將一個pop方法添加到NSMutableArray。我的越野車贏得並打破了UIBarItem的流行。

+1

爲什麼類別方法應該通過前綴命名空間的又一個演示。例如,您可以將類別方法命名爲「 - (id)kevinsapp_pop」而不是「 - (id)pop」。當您對框架類進行子類化時,可能會出現類似的名稱空間問題。 – 2011-03-01 19:22:50

相關問題