我使用以下代码为UINavigationBar创建了一个类别:
// UINavigationBar+MyNavigationBar.m
@interface UINavigationBar (MyNavigationBar)
@end
@implementation UINavigationBar (MyNavigationBar)
- (void)drawRect:(CGRect)rect
{
UIImage *img = [UIImage imageNamed: @"header.png"];
[img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
我在整个项目的任何代码中都没有#import,但是,此类别仍在运行并插入标题图形。这怎么可能?
答案 0 :(得分:25)
因为您在编译时将代码包含在应用程序中。 #import
只是让当前上下文(.h
或.m
)了解该类别中的方法。
在您的应用运行时,任何已编译到您应用中的类别都会被加载。
要删除要添加到目标中的类别,请从应用的Target->Build Phase->Compile Sources
中删除类别.m文件。
假设您希望某些导航栏使用此代码,但不是所有这些代码,最好的方法是将UINavigationBar子类化。 (顺便说一句,你要在你的子类中调用[super drawRect:rect]
)
编辑:将图像添加到UINavigationBar的替代方法,
在任何视图控制器中,您希望图片显示,只需将self.navigationItem.titleView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"header.png"]] autorelease];
添加到viewWillAppear: