2012-09-08 46 views
0

我有一個帶有4個navControllers的選項卡式應用程序,它們都應該使用相同的UINavigationBar(相同的顏色,相同的按鈕)。現在我只想創建一次導航欄!對於所有UINavigationControllers,iOS相同的UINavigationBar

我的第一種方法是繼承UINavigationController,更改欄顏色和按鈕,並將其用於我的AppDelegate中的navControllers,但按鈕沒有顯示出來,我發現文檔說你不是應該繼承UINavigationController ...

你能幫我嗎?我無法在任何地方找到解決方案......

回答

0

如果您僅針對iOS 5,則可以使用外觀代理,該代理允許您在整個應用程序的某個點上自定義UI元素。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAppearance_Protocol/Reference/Reference.html

如果您需要爲此在舊的iOS」,那麼有沒有非常好的解決方案來做到這一點。這裏描述了一種使用方法調配的方法。

http://samsoff.es/posts/customize-uikit-with-method-swizzling

但這並不在iOS 5的工作了。最好的方法是使用iOS 5的外觀代理,以及類似老式iOS的Swizzling的解決方法。

編輯:

下面是一些代碼,我發現使用外觀代理,如果它是可用的和使用方法交叉混合,如果它不是。

if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) { 
    // iOS >= 5.0 -> Use Appearance API 
    [[UINavigationBar appearance] setTintColor:[UIColor redColor]]; 
} 
else { 
    // iOS < 5.0 -> Use Method Swizzling 
    Method drawRectCustomBackground = class_getInstanceMethod([UINavigationBar class], @selector(drawRectCustomBackground:)); 
    Method drawRect = class_getInstanceMethod([UINavigationBar class], @selector(drawRect:)); 
    method_exchangeImplementations(drawRect, drawRectCustomBackground); 
} 

drawRectCustomBackground方法在類別上實現UINavigationBar

+0

感謝您的詳細回答,但我決定,我周圍惹這些事情之前,我寧願用重複的代碼活在每一個視圖控制器導航欄。我的意思是,它只有4個控制器和大約3條線,所以我可以忍受這一點.. – urz0r

0

啓動您的主導航控制器內部有4個數組,每個數組有一個NavigationController裏面爲NavigationBar的每個選項卡。我認爲它會起作用。

希望它能幫助,

馬里奧

相關問題