gpt4 book ai didi

objective-c - 如何动态覆盖UINavigationBar中的drawRect方法?

转载 作者:行者123 更新时间:2023-12-04 03:00:37 25 4
gpt4 key购买 nike

我的大部分应用程序都有一个静态 UINavigationBar,但最后我有一些 View Controller 需要根据 View Controller 本身的某些属性动态设置背景图像。

我目前必须设置的代码工作正常,除了动态部分。是否可以在运行时重写drawRect方法来动态设置背景图片?

@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
UIColor *color = [UIColor blackColor];
UIImage *img = [UIImage imageNamed: @"nav.png"];
[img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
self.tintColor = color;
}
@end

最佳答案

用类别覆盖方法是错误的做法,即使它在这种特殊情况下有效。

如果您在 NIB 中实例化了导航 Controller ,则可以子类化 UINavigationBar 并在 Interface Builder 中将导航 Controller 的栏类设置为您自己的栏类。执行此操作后,您可以更好地控制导航栏的外观。

@interface MyNavigationBar : UINavigationBar
{
UIImage* customImage;
}
@property(nonatomic,retain) UIImage* customImage;
@end

@implementation MyNavigationBar
-(void)drawRect:(CGRect)rect
{
if (self.customImage) {
// draw your own image
} else {
[super drawRect:rect];
}
}
@end

请记住让“自定义” View Controller 在 viewWillDisappear: 中将 customImage 属性重置为 nil。

关于objective-c - 如何动态覆盖UINavigationBar中的drawRect方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5056753/

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