Objective c 如何使用'NSControl'和'NSActionCell'编写自定义控件`

Objective c 如何使用'NSControl'和'NSActionCell'编写自定义控件`,objective-c,cocoa,Objective C,Cocoa,我在这里寻找一个最小可行的例子。我已经在谷歌上搜索和阅读了好几天了,但我找不到一个最新的资源 我的NSControl工作正常,但只要我添加 + (Class)cellClass { return [MYCustomCell class]; } 我得到了这个输出,我的窗口停止正常绘制 <Error>: kCGErrorFailure: CGSShapeWindow <Error>: kCGErrorFailure: Set a breakpoint @ CGErr

我在这里寻找一个最小可行的例子。我已经在谷歌上搜索和阅读了好几天了,但我找不到一个最新的资源

我的NSControl工作正常,但只要我添加

+ (Class)cellClass {
    return [MYCustomCell class];
}
我得到了这个输出,我的窗口停止正常绘制

<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)
:kCGErrorFailure:CGSShapeWindow
:kCGErrorFailure:设置断点@CGErrorBreakpoint(),以便在记录错误时捕获错误。
_NXPlaceWindow:设置窗口形状时出错(1000)
:kCGErrorFailure:CGSShapeWindow
_NSShapeRoundedWithWeighting:设置窗口形状时出错(1000)

我已经阅读了所有我能找到的关于这个主题的东西(包括苹果文档),但是所有的东西似乎都很模糊,无法得到正确的实现。如果有人能给我指出正确的方向(正确的代码示例或文章),我将不胜感激。

我相信我终于找到了答案

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

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

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

我相信我终于找到了答案

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

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

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

我已将此作为一个bug提交给苹果公司#12217884。这很有效!非常感谢您的分享!我希望我能不止一次投票。我已经将此作为一个bug提交给苹果公司。这很有效!非常感谢您的分享!我希望我能不止一次投票。