gpt4 book ai didi

iOS:如何继承 UINavigationBar

转载 作者:行者123 更新时间:2023-11-28 19:13:14 26 4
gpt4 key购买 nike

为什么这行不通?我想子类 UINavigationBar 所以在 xcode 中我点击新文件 -> objective c 类,类:自定义导航栏子类:UINavigationBar

然后在导航 Controller 场景下的 Storyboard中,我单击导航栏并将其类设置为 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,但我觉得它不像对其进行子类化那样正确。在我的第一个 View 的 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];
}
}

最佳答案

我同意 Ryan Perry 的观点。除了他的回答:

你不应该把这段代码放在 initWithFrame 中,而是把你的代码放在 awakeFromNib

- (void) awakeFromNib {
// 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?"); //YES!!
}

关于iOS:如何继承 UINavigationBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13847356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com