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