2012-01-07 45 views
0

我有以下的代码片段:如何在Xcode中定制iPhone上的导航栏?

1)

[[UINavigationBar appearance] setBackgroundImage:myImage forBarMetrics:UIBarMetricsDefault]; 

会在哪里我把那?

或2)

@implementation UINavigationBar (BackgroundImage) 
//This overridden implementation will patch up the NavBar with a custom Image instead of the title 
- (void)drawRect:(CGRect)rect { 
    UIImage *image = [UIImage imageNamed: @"NavigationBar.png"]; 
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
} 
@end 

会在哪里我把那?

我曾尝试添加一个导航栏到我的viewcontroller,但我不完全知道在哪里把这些代码段。

+0

你也可以问你会需要定制,为改变说整个导航彩色/酒吧/ titleImage ...等 – Splendid 2012-01-07 16:43:02

+0

问题看起来像重复,你可以参考下面的线程 - http://stackoverflow.com/questions/704558/custom-uinavigationbar-background – rishi 2012-01-07 16:55:14

回答

1

Snippet 1仅限iOS 5.0。你会在你的导航栏创建之前把它放在某个地方,因此可能在applicationDidFinishLaunching:。看看这里了解更多信息:

片段2是如你所拥有的iOS 5.0之前做。这是UINavigationBar上的一个类别。我之前没有看到重写drawRect:,但它似乎确实有效。只需在您的项目中创建一个类别UINavigationBar并添加该代码即可。因此,像:

UINavigationBar+MyCategory.h

@interface UINavigationBar (MyCategory) 
- (void)drawRect:(CGRect)rect; 
@end 

UINavigationBar+MyCategory.m

#import "UINavigationBar+MyCategory.h" 

@implementation UINavigationBar (MyCategory) 
- (void)drawRect:(CGRect)rect { 
    UIImage *image = [UIImage imageNamed: @"NavigationBar.png"]; 
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
} 
@end 
+0

没有必要把'drawRect'放到'.h'文件中。它不是公开的,不应该直接调用。 – Mundi 2012-01-07 16:46:21

+0

我对objective-c很新颖,不幸的是我碰巧从未使用过类别...所以基本上我必须创建一个名为UINavigationBar + MyCategory.h的新类UINavigationBar? – 2012-01-07 16:53:43

+0

我建议你去阅读一下Objective-C的类别(尝试维基百科或Cocoa Dev Central),然后它应该变得清晰。我所展示的是2 *文件*,然后将它们添加到您的项目中。 – mattjgalloway 2012-01-07 17:03:00