Chr*_*ris 16 cocoa-touch objective-c uitoolbar uinavigationcontroller
我有一个iPhone应用程序使用,UINavigationController并希望自定义背景图像元素.我能够UINavigationController's UINavigationBar很容易地使用Objective-C类别,如下所示:
http://foobarpig.com/iphone/uinavigationbar-with-solid-color-or-image-background.html
我想为此做同样的事情UINavigationController's UIToolbar,但同样的方法似乎不起作用(虽然我完全不知道为什么不这样做.)我环顾四周,人们似乎建议进行子类化UIToolbar,但这是不可能的对于UINavigationController's工具栏,这是一个只读的UIToolbar.我想使用UINavigationController's工具栏而不是仅仅创建一个子视图工具栏,因为我正在使用滑入式setToolbarHidden动画.
任何人都知道是否可以将背景图像应用于此UINavigationController工具栏(最有可能通过某种方式覆盖该drawRect方法)?
Mau*_*zio 10
更新:
在iOS 5.0+中,您现在可以使用UIAppearance自定义导航栏.
另一种方法是简单地为您的应用程序UINavigationBar类创建一个Category .实现起来非常简单:
接口:
@interface UINavigationBar (TENavigationBar)
- (void) drawRect:(CGRect)rect;
@end
Run Code Online (Sandbox Code Playgroud)
执行:
@implementation UINavigationBar (TENavigationBar)
- (void) drawRect:(CGRect)rect
{
UIImage *image = [UIImage imageNamed:@"navigation_background"];
[image drawInRect:CGRectMake(0,
0,
self.frame.size.width,
self.frame.size.height)];
}
@end
Run Code Online (Sandbox Code Playgroud)
然后,这将自动全局应用于您UINavigationBar的所有人.
您需要子类而不是创建类别.
我不太清楚为什么一个类别适用于UINavigationBar但不是UIToolbar,但是子类化适用于它们两者,我认为这是更加标准的方式来定制这样的东西.
所以为了子类UIToolbar,创建一个名为MyToolbar(或类似的东西)的类并将其放在.h中:
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface MyToolbar : UIToolbar {}
- (void)drawRect:(CGRect)rect;
@end
Run Code Online (Sandbox Code Playgroud)
这在.m文件中:
#import "MyToolbar.h"
@implementation MyToolbar
- (void)drawRect:(CGRect)rect {
backgroundImage = [UIImage imageNamed:@"my-awesome-toolbar-image.png"];
[backgroundImage drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
Run Code Online (Sandbox Code Playgroud)
从那里你必须告诉导航控制器使用MyToolbar而不是UIToolbar.我发现这样做的最简单方法是在Interface Builder中选择导航控制器,然后在属性检查器中选中"显示工具栏"框.工具栏应显示在NavigationController窗口中.单击它,然后在Identity Inspector中将类更改为MyToolbar.