【问题标题】:custom NSView drawing not working自定义 NSView 绘图不起作用
【发布时间】:2010-12-25 00:08:00
【问题描述】:

我正在尝试编写一个支持添加背景颜色的自定义 NSView。我覆盖了drawRect

- (void)drawRect:(NSRect)rect {

    [[NSColor blackColor] set];  
    //[NSBezierPath fillRect:rect]; //I tried this too  
    NSRectFill([self bounds]);  

}

我设置了我的自定义视图类型来替换我的主窗口的内容视图 NSView。但是当我运行它时,背景并没有像预期的那样变黑 - 但一些包含的子视图会。

我做错了什么?我的 draw 方法肯定会被调用,但背景不会改变。

【问题讨论】:

  • 1 - 您如何将内容视图替换为自定义视图? 2 - 你怎么知道你的自定义视图的 -drawRect: 被调用了?
  • 很有可能您的方法没有被调用。尝试在您的 -drawRect: 方法中放置一个断点,看看它是否被命中。如果没有,请重新检查你的 UI 设置(代码或 nib),看看为什么你的类没有被使用。

标签: objective-c cocoa


【解决方案1】:

不要替换窗口的内容视图,因为它是经过特殊处理的。将您的自定义视图添加到内容视图,然后设置自动调整大小标志。

【讨论】:

  • 这是不正确的:内容视图只是一个视图,并不比任何其他视图更特别。您可以通过创建(并正确设置框架和自动调整大小的行为)并通过 NSWindow 的 -setContentView: 或单击窗口中的内容视图(在 nib/xib 中)并将类名设置为您的自定义视图。工作得很好,而且经常做。
  • 你是对的。我的意思是,你不能定义它的框架或它的自动调整大小的标志。
  • 其实,有一个“特殊”的区别:如果你使用内容视图而不是自定义视图,initWithCoder 将被调用而不是 initWithFrame。
猜你喜欢
  • 1970-01-01
  • 2022-01-08
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多