自定义以编程方式创建的导航栏的背景图像

时间:2011-09-08 19:02:18

标签: iphone ios ios4 uinavigationcontroller uinavigationbar

我一直在定制我应用的导航栏。 我以编程方式添加了导航控制器。 实际上,在我的应用委托的方法 application:didFinishLanchingWithOptions 中, 我使用以下代码添加并隐藏了导航栏:

self.window.rootViewController  = self.viewController;
// ListingNav previously declared as instance variable
self.ListingNav = [[UINavigationController alloc] initWithRootViewController:self.viewController];
self.ListingNav.navigationBarHidden = YES;
[self.window addSubView:ListingNav.view];
[self.window makeKeyAndVisible];
return YES;

现在,我想将图像设置为导航栏背景,为“后退”按钮设置另一个背景图像,并在同一导航栏的右侧添加另一个按钮以及其自己的背景图像。有关如何进行的任何想法?

求助,

的Stephane

4 个答案:

答案 0 :(得分:2)

您可以尝试:

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed: @"ImageNameWithOutExtension"] forBarMetrics: UIBarMetricsDefault];

答案 1 :(得分:1)

子类UINavigationBar并覆盖其drawRect方法以绘制图像。

如果您通过InterfaceBuilder创建了UINavigationController,则可以轻松更改关联的UINavigationBar的类。如果您通过代码创建UINavigationController,则可以使用object_setClass。 (this one for example

StackOverflow上有一个很多的问题已经在完全相同的主题上,请不要犹豫,在网站上搜索“NavigationController背景”。

答案 2 :(得分:1)

您可以自定义导航栏而不隐藏它。只需使用addSubview方法添加这些组件。

可以按如下方式添加背景图像:

UIImageView *imageview = [[UIImageView alloc] initWithImage: [UIImage imageNamed: @"bg.png"]];
[self.navigationController.navigationBar addSubview:imageview];

[self.navigationController.navigationBar sendSubviewToBack:imageview];
[imageview release];

由于您需要自定义按钮,因此可以以相同方式添加UIButton。创建一个具有自己背景的新UIButton并添加它。

答案 3 :(得分:0)

使用此代码.....

     [self.navigationController.navigationBar setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@""]]];