我试图在OS X App中的另一个视图上显示自定义NSView。这是自定义视图。它只是一个红色框:
@interface HelpBarView : NSView
@end
@implementation HelpBarView
- (id)initWithFrame:(NSRect)frameRect
{
self = [super initWithFrame:frameRect];
if (self)
{
NSLog(@"init");
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
NSLog(@"draw");
[[NSColor redColor] set];
NSRectFill(self.bounds);
}
@end
要在另一个视图上显示此视图:
HelpBarView* hbv = [[HelpBarView alloc] initWithFrame:NSMakeRect(10, 20, 100, 100)];
[self.view addSubview:hbv];
这不会显示视图。但我可以从日志中看到,这两种方法都被调用了。同样在XCode调试视图层次结构中,我可以看到,该框位于另一个视图的正前方并且位于正确的位置。但在真实的程序中,它并不可见。
如果我这样做:
[self.view setSubviews:[NSArray arrayWithObject:hbv]];
然后会显示但所有其他子视图都缺失,所以这不是我想要的。
我缺少什么?如何在另一个视图上方显示视图?
答案 0 :(得分:0)
显然,您需要将此行添加到NSView子类的-initWithFrame
方法中:
self.wantsLayer = YES;
这解决了我所有关于子视图的问题,即使该子视图显示在Xcode的调试层次结构视图中也没显示在屏幕上。