我试图在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 Debug视图层次结构中,我可以看到该框位于另一个视图的前面,并且位置正确。但是在实际程序中它是不可见的。

另外,如果我这样做:

[self.view setSubviews:[NSArray arrayWithObject:hbv]];


然后将显示它,但所有其他子视图均丢失,所以这不是我想要的。

我想念什么?如何在另一个视图上方显示一个视图?

最佳答案

显然,您需要将此行添加到NSView子类的-initWithFrame方法中:

self.wantsLayer = YES;


这解决了我的所有问题,即使子视图显示在Xcode的调试层次结构视图中,该子视图也没有显示在屏幕上。

关于objective-c - 在其他 View 上显示NSView子类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27044427/

10-14 20:42
查看更多