Как создать настраиваемый элемент управления календаря?

Синопсис

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

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

введите здесь описание изображения

Концепт

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

Вопрос

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

Изменить: Мои мысли

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

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


person Lenar Hoyt    schedule 24.08.2011    source источник


Ответы (1)


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

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

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

person Alexander Ljungberg    schedule 25.08.2011