gpt4 book ai didi

objective-c - 将自定义 NSControl 和 NSCell 添加到 xib

转载 作者:行者123 更新时间:2023-12-03 16:32:37 27 4
gpt4 key购买 nike

我创建了一个非常简单的 NSControl 和相对的 NSCell 来进行一些测试。要在窗口上添加此控件,我通过“Interface Builder”拖动 NSView 添加它,然后将其类更改为 MyControl

这是我的代码:

NSControl

@implementation MYControl


+ (void)initialize
{
if (self == [MYControl class])
{
[self setCellClass: [MYCell class]];
}
}

- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
}

return self;
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
}

return self;
}


+(Class)cellClass{
return [MYCell class];
}


@end

NSCell

@implementation MYCell

-(void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView{
/*
[[NSGraphicsContext currentContext]saveGraphicsState];
[[NSColor redColor]set];
[NSBezierPath fillRect:cellFrame];
[[NSGraphicsContext currentContext]restoreGraphicsState];*/
}
@end

如果我从 NSControl 类中删除对 MyCell 的所有引用,它就可以工作(但显然没有显示任何内容),否则启动应用程序时会出现一些错误:

<Error>: kCGErrorFailure: CGSShapeWindow 

<Error>: kCGErrorFailure: Set a breakpoint @ CGErrorBreakpoint() to catch errors as they are logged.

_NXPlaceWindow: error setting window shape (1000)

<Error>: kCGErrorFailure: CGSShapeWindow

_NSShapeRoundedWindowWithWeighting: error setting window shape (1000)

我错了什么?我如何通过 XCode4/IB 正确设置自定义 NSControl?从文档中我读到了一些关于 IB Palette 的内容,但我认为我不能在 Xcode 4.0 中使用它

编辑:

使用 initWithFrame 以编程方式添加 NSControl 它可以工作

最佳答案

我相信我终于找到了答案。

必须在 NSCell 子类中重写 -cellSize 方法。经过大量的堆栈跟踪后,我发现如果没有覆盖此方法,该方法将返回 (40000, 40000) 作为单元格大小,从而产生我们所看到的大小调整错误。由于我的 NSCell 有特殊需求,需要单元格占据整个 NSControl 的绘图区域,因此我简单地使用了以下内容。

- (NSSize)cellSize {
return self.controlView.bounds.size;
}

希望这对您的情况有所帮助。

关于objective-c - 将自定义 NSControl 和 NSCell 添加到 xib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10597644/

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