【问题标题】:Custom drawRect: in UINavigationBar subclass自定义drawRect:在UINavigationBar子类中
【发布时间】:2012-05-25 23:21:09
【问题描述】:

我想继承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];
}

为什么标题消失了?我打电话给superdrawRect: 并且不更改任何其他内容。

谢谢!

【问题讨论】:

  • 问题不清楚。 “一旦我删除此方法”是哪种方法? drawRect 还是冒号后面的那个?如果是drawRect,那么这是一个非常有趣的问题;)
  • @Yar 已修复。这是冒号之后的方法。简单地说,只要我不覆盖navigationBar,标题就会回到那里。希望它更清楚。感谢您的评论!
  • navigationBar 方法可能返回UINavigationBar 的具体子类,或者至少设置实例。调试看看。

标签: objective-c cocoa-touch uinavigationbar


【解决方案1】:

找到了!答案如下:

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

在这种情况下,它会是:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2011-10-30
    相关资源
    最近更新 更多