Как создать пользовательский элемент управления календаря? - PullRequest
3 голосов
/ 25 августа 2011

1001 *

Синопсис

Я хочу создать пользовательский элемент управления, который отображает события в календаре.

Вот черновик:

enter image description here

Концепция

  • Нижний левый блок имеет вертикальную прокрутку. Нижний правый блок прокручивается в обоих направлениях.
  • Возможно перемещать представления событий вокруг. Если они достигают границ во время перетаскивания вида, автопрокрутки в этом направлении.
  • Область прокрутки ограничена в соответствии с самым ранним и последним событием в базе данных или определенным максимумом. Но если пользователь продолжает прокручивать, область прокрутки соответственно увеличивается и сворачивается, если пользователь прокручивает назад и не создал новое событие.
  • Эта кнопка «Июль 2011» внизу выполняет функцию скроллера. Если пользователь тянет его за пределы области прокрутки, он соответственно увеличивается.
  • Название месяца в заголовке всегда остается на этой позиции, пока не наступит следующий месяц, поэтому это длинная ячейка, которая охватывает плавающие заголовки дневных ячеек месяца.
  • Строки и столбцы заголовка всегда видны.

Вопрос

Так как я лишь немного знаком с возможностями классов управления Cappuccino или Cocoa: где я могу напрямую использовать классы Cappuccino или Cocoa, где целесообразно создавать подклассы элементов управления Cappuccino / Cocoa и где я должен писать пользовательские управление с нуля?

Редактировать: Мои мысли

Я думаю, разумно разделить элемент управления с помощью SplitView с вертикальным разделителем. Я мог бы использовать TableView для левого столбца заголовка в левом подпредставлении. И я мог синхронизировать вертикальную прокрутку с тем, что происходит с правой стороны.

Но я не очень уверен насчет вида с правой стороны. Я думал о TableView, но на самом деле мне нужны только ячейки в качестве фоновой сетки. Таким образом, я думаю, было бы трудно иметь две строки заголовка и реализовать желаемое поведение прокрутки. Таким образом, лучший способ, вероятно, - создать совершенно новый пользовательский вид. Но опять же вопрос: где разумно подкласс капучино соотв. Элементы управления Какао и где я должен написать собственные элементы управления с нуля?

1 Ответ

2 голосов
/ 25 августа 2011

Для календарного представления оно выглядит достаточно иначе, чем для табличного представления, так что может быть проще написать его с нуля.Возможно, начните с чистого CPView и нарисуйте фон в его методе drawRect:, затем создайте подкласс CPControl для событий.В его drawRect визуализируйте его границы и фон, или используйте CPBox с setBackgroundColor:.Текст лучше всего рисовать с помощью подпредставлений меток.Реагируйте на mouseDown и т. Д. Для реализации перетаскивания, двойного щелчка по событиям и чего-либо еще.

Затем поместите весь вид календаря в CPScrollView.Синхронизируйте вертикальную прокрутку с представлением прокрутки слева - используйте CPTableView там.Прокрутка довольно проста с CPScrollView: просто вызовите scrollToPoint: в представлении содержимого.Вам нужно будет динамически увеличивать размер представления контента, чтобы обеспечить «бесконечную» прокрутку.Может быть, просто всегда делать размер представления контента минимальным размером его событий и текущей позиции прокрутки + X (X дает пользователю некоторое расстояние для прокрутки, прежде чем вам придется снова изменять размер).

В двух словах, подкласс CPView и CPControl - CPView, когда нет взаимодействия, и CPControl, когда есть.

...