Я создаю NSPredicateEditor
, и я хочу способность сделать усовершенствованное сравнение даты.
Я понимаю, что могу создать NSPredicateEditorRowTemplate
с a rightExpressionType
из NSDateAttributeType
, но предикаты я хочу создать потребность, которая будет намного более усовершенствована, чем это.
Например, мне нужно к основному сравнению как:
dateKeypath < aDate
dateKeypath <= aDate
dateKeypath = aDate
dateKeypath != aDate
dateKeypath > aDate
dateKeypath >= aDate
Этих основных сравнений довольно легко достигнуть, и у меня есть они работа. Однако я также должен сделать сравнения как:
dateKeypath isInTheLast n days
(или недели, месяцы, годы)dateKeypath isNotInTheLast n days
(или недели, месяцы, годы)dateKeypath between aDate and anotherDate
Как я могу достигнуть этих видов сравнений? Я понимаю, что должен буду создать пользовательское NSPredicateEditorRowTemplate
, но я не нашел четкой документации относительно того, как достигнуть чего-то вроде этого.
Бонусные очки РЕДАКТИРОВАНИЯ доступны для того, чтобы также знать, как сделать эти сравнения полной датой и временем (year-month-day-hour-minute-second) сравнение (как NSDateAttributeType
только имеет гранулярность дня месяца года).
Оглядываясь назад, этот ответ кажется очевидным:
Я фактически описал 3 шаблонов строк редактора предикатов, а не один. Вот три шаблона:
dateKeyPath [<, <=, =,>,> =,! =] [NSDatePicker]
dateKeyPath [inTheLast, notInTheLast] [NSTextField] [NSPopUpButton]
dateKeyPath [между] [NSDatePicker] "и" [NSDatePicker]
Если вы создадите эти три шаблона строк редактора предикатов и передадите их в predicateEditor, редактор поймет, что все они используют один и тот же dateKeyPath
, и отобразит затем объедините всех своих операторов в одну всплывающую кнопку. Затем он отключит фактические представления справа от оператора в зависимости от того, какой оператор выбран.
Редактировать
Для бонусных баллов: вы можете изменить точность выбора даты, переопределив метод templateViews
, получив templateViews из super
и установив datePickerElements
в соответствующих сборщиках.
Редактировать 24 ноября 2010 г.
Для тех, кто сталкивается с этим снова, я написал пару сообщений в блоге о создании пользовательских NSPredicateEditorRowTemplate
:
NSPredicateEditorRowTemplate
NSPredicateEditorRowTemplate
(здесь показано, как сделать inTheLast
и inTheNext
шаблон строки)