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

时间:2012-07-23 18:46:25

标签: objective-c cocoa

我正在寻找一个最小的可行示例。我一直在谷歌和阅读几天,我找不到最新的单一资源。

我的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)

我已经阅读了关于这个主题的所有内容(包括Apple文档),但是一切看起来都很模糊,无法实现。如果有人能指出我正确的方向(正确的代码示例或文章),我将非常感激。

1 个答案:

答案 0 :(得分:4)

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

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

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

希望这有助于你的情况。