为什么这不起作用?我想sublcass UINavigationBar的所以在Xcode我点击新的文件 - >目标C类, 类:CustomNavBar 子类:UINavigationBar的iOS:如何继承UINavigationBar
导航控制器的场景下的故事板然后,我点击导航栏,并设置它的类到CustomNavBar。
然后我进入我的CustomNaVBar类并尝试添加自定义图像背景。
在initWithFram方法我已经加入这个:
- (id)initWithFrame:(CGRect)frame
{
NSLog(@"Does it get here?"); //no
self = [super initWithFrame:frame];
if (self) {
// Initialization code
UIImage *image = [UIImage imageNamed:@"customNavBarImage.png"];
// [self setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
[self setBackgroundColor:[UIColor colorWithPatternImage:image]];
[[UINavigationBar appearance] setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
NSLog(@"Does this get called?"); //no
}
return self;
}
我没有看到在控制台上的任何输出。
相反,我已经这样做了自定义UINavBar,但我觉得它不像子分类那样正确。在我的第一个观点的viewDidLoad我加入这一行:
- (void)viewDidLoad
{
[super viewDidLoad];
if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) {
UIImage *image = [UIImage imageNamed:@"customNavBarImage.png"];
[self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}
}
在'init'方法或'layoutSubviews'方法中添加该方法。它应该工作。 – iDev
那么,我总是只使用viewDidLoad。似乎子类化对于设置背景图像来说相当有用。 – Josiah