我在Custom background for UINavigationBar problems發佈的答案後成功實現了具有自定義背景的導航欄。UINavigationBar上的類別 - 僅適用於某些控制器
但是,我想有一些我的控制器的標準導航欄,我不知道如何實現這一點。
如果我基於基於導航的應用程序模板啓動一個新項目,並將UINavigationBar類別添加到單獨的.h和.m文件中,則會立即應用此類別。不包括或不必要的。這個怎麼用?
感謝您的幫助!
我在Custom background for UINavigationBar problems發佈的答案後成功實現了具有自定義背景的導航欄。UINavigationBar上的類別 - 僅適用於某些控制器
但是,我想有一些我的控制器的標準導航欄,我不知道如何實現這一點。
如果我基於基於導航的應用程序模板啓動一個新項目,並將UINavigationBar類別添加到單獨的.h和.m文件中,則會立即應用此類別。不包括或不必要的。這個怎麼用?
感謝您的幫助!
這裏有一個快速的黑客 - 用你的導航欄的標籤屬性來打開自定義代碼即
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
if (tag < 500) {
// Drawing code
UIImage *img = [UIImage imageNamed: @"navbar_background.png"];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, CGRectMake(0, 0, 320, self.frame.size.height), img.CGImage);
} else {
// Do the default drawing
}
}
@end
現在,用了不到500標籤導航控制器上使用您的自定義背景。如果您將標籤設置爲> 500,您將獲得默認行爲。
編輯
由於@MikeWeller正確地指出,我們沒有獲得初步實現drawRect中,我們的類別有覆蓋它。
看看this link一個解決方案 - 基本上,這是一個宏,可包括,給你一個額外的方法:
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
if (tag < 500) {
// Drawing code
UIImage *img = [UIImage imageNamed: @"navbar_background.png"];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, CGRectMake(0, 0, 320, self.frame.size.height), img.CGImage);
} else {
// Do the default drawing
invokeSupersequent(rect);
}
}
@end
NB我還沒有這個嘗試自己,但使用過的其他物品從這個博客以前取得了巨大的成功,所以我相信它:)讓我們知道你如何繼續!因爲蘋果已經改變UINavigationBar的實施使而是創建UINavigationBar的一個子類,並覆蓋的方法有,而不是創建類別
問題是,如果你已經用類別方法覆蓋它,沒有辦法訪問原始的drawRect實現。這是您需要使用方法調整的地方。 – 2011-06-17 12:05:38
@MikeWeller - 好點 - 我正在修改我的答案:) – deanWombourne 2011-06-17 12:09:30
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
if (tag < 500) {
// Drawing code
UIImage *img = [UIImage imageNamed: @"navbar_background.png"];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, CGRectMake(0, 0, 320, self.frame.size.height), img.CGImage);
} else {
// Do the default drawing
}
}
@end
Remeber這種方法不會在安裝iOS 5.0的工作。
正如@deanWombourne指出的,最簡單的解決方案是編寫一個子類而不是一個類,在我的情況下,這是一個有效的解決方案。不過,我仍然想了解類別的性質,以及爲什麼我的UINavigationBar類別會自動應用到我的xib文件中的每個導航欄。謝謝! – Reinhold 2011-06-17 12:49:29