2012-02-21 238 views
1

我有一個導航控制器作爲我的應用程序的根,我使用外觀代理自定義在iOS 5的樣子,但對iOS 4的,我希望用一個類來覆蓋的drawRect:,這是罰款,除非所有導航欄都受到您對類別的期望影響。自定義導航欄

我不想用「系統」彈出窗口,如郵件作曲家,或SMS作曲家亂動,我想他們的酒吧留下藍色和系統等。

我試圖創建我自己的UINavigationController與它的廈門國際銀行和類的導航欄更改爲UINavigationBar的我的自定義子的姑娘。但結果並沒有在屏幕上產生影響。

我知道以下職位,但不能得到任何解決方案,按預期運行。方法:

_myNavigationController = [[UINavigationController alloc] initWithRootViewController:someVC]; 

if([[BT_NavigationController class] respondsToSelector:@selector(appearance)]){ 

    // some iOS 5 magic in here ! 
    [_myNavigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"topbar.png"]; 

}else{ 

    // Probably looking at app store refusal 
    CustomBar * bar = [[CustomBar alloc] init]; 
    // [_myNavigationController setNavigationBar: bar]; 
    [bar release]; 

} 

[parentView presentModalViewController:_myNavigationController animated:YES]; 

爲了避免這種情況,我創建一個UINavigationController,我也有一個廈門國際銀行,重新分配類導航欄 How to subclass UINavigationBar for a UINavigationController programmatically?

我該做的工作,但使用無證setNavigationBar第一次嘗試到我的自定義類中,但將斷點放在drawRect:方法中,我可以看到這不是被調用的。

爲什麼會是這樣,似乎我的代碼沒有加載筆尖,因此並沒有意識到NAB杆應該是我的自定義類,而不是UINavigationBar的。

任何提示將有幫助,謝謝。

回答

2

如果你的修改只是添加圖像,你可以簡單地從視圖控制器插入你想定製:

UIImageView *bgImageView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"topbar.png"]] autorelease]; 
[self.navigationController.navigationBar addSubview:bgImageView]; 

你有一點點調整基於你有什麼其他的元素你UINavigationBar爲您的UIImageView在子視圖的最低索引,但仍然在背景之上。爲我們工作。

祝你好運。

+0

看來,當我爲我的導航控制器設置此值時,後續詳細視圖的小節標題和小節按鈕將放置在圖像後面。 – Daniel 2012-02-22 14:48:36

+0

是的。您必須在導航條上使用sendSubviewToBack :(或insertSubview:atIndex :)。這取決於你的navigationBar的子視圖。 – teriiehina 2012-02-22 15:24:17