自定义drawRect:在UINavigationBar子类中

时间:2012-05-25 23:21:09

标签: objective-c cocoa-touch uinavigationbar

我想继承UINavigationBar,以便我可以在其drawRect:中进行自定义绘图。

这是我的代码:

导航控制器(.h)

@interface CORENavigationController : UINavigationController

@property (strong, nonatomic) CORENavigationBar *customNavigationBar;

@end

导航控制器(.m)

@implementation CORENavigationController

@synthesize customNavigationBar = _customNavigationBar;

- (UINavigationBar *)navigationBar {
    if (![self customNavigationBar]) {
        [self setCustomNavigationBar:[[CORENavigationBar alloc] init]];
    }
    return [self customNavigationBar];
}

导航栏(.h)

@interface CORENavigationBar : UINavigationBar

@end

导航栏(.m)

@implementation CORENavigationBar

- (void)drawRect:(CGRect)rect
{
    [super drawRect:rect];
}

问题是导航栏没有标题,例如我只能看到标准的蓝色背景。

一旦我删除了以下方法,标题就会回到那里:

- (UINavigationBar *)navigationBar {
    if (![self customNavigationBar]) {
        [self setCustomNavigationBar:[[CORENavigationBar alloc] init]];
    }
    return [self customNavigationBar];
}

为什么标题会消失?我拨打super的{​​{1}}并且不要更改任何其他内容。

谢谢!

1 个答案:

答案 0 :(得分:3)

发现它!这是答案:

https://stackoverflow.com/a/9610801/1306956

在这种情况下,它是:

[navigationController setValue:[[CORENavigationBar alloc] init] forKeyPath:@"navigationBar"];

在iOS 5.1.1(9B206)上测试。像魅力一样。