我想构建一个在日历中显示事件的自定义控件。
这是草案:
因为我只是略微熟悉Cappuccino或Cocoa的控件类的功能:我在哪里可以直接使用Cappuccino或Cocoa类,哪里可以合理地继承Cappuccino / Cocoa控件以及我在哪里编写自定义从头开始控制?
我认为将控件与带有垂直分隔符的SplitView分开是合理的。我可以在左侧子视图中使用TableView作为左侧标题列。我可以将垂直滚动与右侧发生的事情同步。
但我对右侧的观点不太确定。我想过TableView但实际上我只需要将单元格作为背景网格。因此,我猜,要有两个标题行并实现所需的滚动行为是很困难的。因此,最好的方法可能是创建一个全新的自定义视图。但接下来的问题是:将Cappuccino子类化为何处是合理的。 Cocoa控件以及从哪里开始编写自定义控件?
答案 0 :(得分:2)
对于日历视图,它看起来与表视图有很大不同,从头开始编写它可能更容易。也许从裸CPView
开始并在其drawRect:方法中绘制背景,然后为事件创建CPControl
子类。在其drawRect中渲染其边框和背景,或使用CPBox
和setBackgroundColor:
。最好使用标签子视图绘制文本。对mouseDown
做出反应,以实现拖放,双击事件以及您可能想要的其他内容。
然后将整个日历视图放在CPScrollView
中。将其垂直滚动与左侧的滚动视图同步 - 在那里使用CPTableView
。使用CPScrollView
滚动非常简单:只需在内容视图中调用scrollToPoint:
即可。您需要动态扩展内容视图大小以允许“无限”滚动。也许只是总是使内容视图大小最小化其事件的大小和当前滚动位置+ X(X给用户一些距离以便在您再次调整大小之前滚动)。
简而言之,子类CPView
和CPControl
- CPView
在没有互动时,CPControl
在没有互动时。