3

我想子类化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'sdrawRect:并且不改变任何其他东西。

谢谢!

4

1 回答 1

3

找到了!这是答案:

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

在这种情况下,它将是:

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

在 iOS 5.1.1 (9B206) 上测试。奇迹般有效。

于 2012-05-26T11:47:20.480 回答