gpt4 book ai didi

objective-c - 如何构建日历自定义控件?

转载 作者:搜寻专家 更新时间:2023-10-30 20:22:21 25 4
gpt4 key购买 nike

概要

我想构建一个在日历中显示事件的自定义控件。

这是草稿:

enter image description here

概念

  • 左下方的框可垂直滚动。可在两个方向滚动的右下角框。
  • 可以移动事件 View 。如果它们在拖动过程中接近边界, View 会自动朝那个方向滚动。
  • 根据数据库中最早和最新的事件或某个最大值,滚动区域是有限的。但是,如果用户继续滚动,则滚动区域会相应增大,如果用户向后滚动且未创建新事件,则滚动区域会折叠。
  • 底部的这个“2011 年 7 月”按钮用作滚动条。如果用户将其拉出滚动区域的边界,它会相应地增长。
  • 标题中的月份名称始终保留在这个位置,直到下个月移入,因此它是一个长单元格,跨越月份的日期单元格,带有 float 标题。
  • 标题行和列始终可见。

问题

由于我对 Cappuccino 或 Cocoa 的控件类的功能只是略微熟悉:我在哪里可以直接使用 Cappuccino 或 Cocoa 类,在哪里子类化 Cappuccino/Cocoa 控件是合理的,我在哪里必须编写自定义从头开始控制?

编辑:我的想法

我认为使用带有垂直分隔线的 SplitView 来划分控件是合理的。我可以将 TableView 用于左侧 subview 中的左侧标题列。我可以将垂直滚动与右侧发生的同步。

但我不太确定右侧的 View 。我考虑过 TableView,但实际上我只需要将单元格作为背景网格。因此,我想,很难有两个标题行并实现所需的滚动行为。所以最好的方法可能是创建一个全新的自定义 View 。但问题又来了:将 Cappuccino 子类化在哪里是合理的。 Cocoa 控件以及我必须在哪里从头开始编写自定义控件?

最佳答案

对于日历 View ,它看起来与表格 View 有很大不同,因此从头开始编写它可能更容易。或许从一个简单的 CPView 开始,并在其 drawRect: 方法中绘制背景,然后为事件创建一个 CPControl 子类。在它的 drawRect 中渲染它的边框和背景,或者使用带有 setBackgroundColor:CPBox。最好使用标签 subview 绘制文本。响应 mouseDown 等以实现拖放、双击事件以及您可能需要的其他内容。

然后将整个日历 View 放在 CPScrollView 中。将其垂直滚动与左侧的 ScrollView 同步 - 在此处使用 CPTableView。使用 CPScrollView 滚动相当容易:只需在内容 View 上调用 scrollToPoint:。您将需要动态扩展内容 View 大小以允许“无限”滚动。也许总是让内容 View 大小为其事件大小的最小值和当前滚动位置 + X(X 给用户一些滚动距离,然后你必须再次调整大小)。

简而言之,子类CPViewCPControl - CPView当没有交互时,CPControl当有。

关于objective-c - 如何构建日历自定义控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7182845/

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