gpt4 book ai didi

objective-c - 在其他 View 上显示 NSView 子类

转载 作者:行者123 更新时间:2023-12-03 17:21:10 24 4
gpt4 key购买 nike

我正在尝试在 OS X 应用程序中的另一个 View 上显示自定义 NSView。这是自定义 View 。它只是一个红色框:

@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

要在另一个 View 上显示此 View :

HelpBarView* hbv = [[HelpBarView alloc] initWithFrame:NSMakeRect(10, 20, 100, 100)];
[self.view addSubview:hbv];

这不会显示 View 。但我可以从日志中看到,这两种方法都被调用。另外,在 XCode 调试 View 层次结构中,我可以看到该框位于另一个 View 的前面,并且位置正确。但在实际程序中它是不可见的。

如果我这样做:

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

然后它将显示,但所有其他 subview 都丢失,所以这不是我想要的。

我错过了什么?如何在另一个 View 上方显示一个 View ?

最佳答案

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

self.wantsLayer = YES;

这解决了 subview 未显示在屏幕上的所有问题,即使它显示在 Xcode 的调试层次结构 View 中。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com