我已重寫drawLayer:inContext:在UINavigationBar中的一個類別,以便我可以將自定義圖像放在那裏。我討厭它,但我的客戶堅持不懈。內存警告消除UINavigationBar按鈕
因此,我必須回到一些非常醜陋的黑客手中才能找到它。我不得不在該類別中添加一個新方法,以在導航欄標題上放置標題,並且我必須在-viewDidAppear
中明確地調用它。
我可以忍受這一點。真正的問題是,當內存不足時,看起來UINavigationBar正在卸載它的子視圖,包括我的後退按鈕!我真的不知道如何從中恢復過來。
這是我的UINavigationBar類別。我認爲我從這裏得到了這個代碼,核心圖形大多隻是讓我的頭旋轉。
@implementation UINavigationBar (background)
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
if([self isMemberOfClass: [UINavigationBar class]]){
UIImage *image = [UIImage imageNamed:@"top_bar.png"];
//CGContextClip(ctx);
CGContextTranslateCTM(ctx, 0, image.size.height - 20);
CGContextScaleCTM(ctx, 1.0, -1.0);
CGContextDrawImage(ctx, CGRectMake(0, 2, self.frame.size.width, self.frame.size.height), image.CGImage);
}
}
-(void)customTitle:(NSString *)text
{
UINavigationItem *top = self.topItem;
[[top.titleView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 40)];
title.textAlignment = UITextAlignmentCenter;
title.text = text;
title.textColor = [UIColor blackColor];
title.font = [UIFont boldSystemFontOfSize:16];
title.backgroundColor = [UIColor clearColor];
top.titleView = title;
[title release];
}
有沒有更簡單的方法?如果沒有,我該如何告訴UINavigationBar,「用你應該擁有的子視圖重新加載自己」?
更新:嘗試覆蓋-drawRect
而不是。代碼更簡單,但問題仍然存在 - 在某些情況下,後退按鈕消失。順便說一下,我假設它與接收到低內存警告有關。它似乎只是在通過UIImagePicker旅行回來之後發生的,所以也許在那裏發生了一些改變的事情。此外,我也確實啓用了NSZombies,顯然這樣做會明顯改變內存的膚色。
請參閱我的更新。 – 2010-08-24 11:59:52