Средства форматирования и элементы пользовательского интерфейса

Эта статья описывает, как связать средство форматирования с ячейкой в Какао. Эта статья не применяется к iOS.

Соединение средства форматирования с ячейкой

В Какао ячейки пользовательского интерфейса, выводящие на экран текст, но имеющие произвольный объект как их содержание, могут использовать средства форматирования для обоих вводов и выводов. Когда ячейка выведена на экран, ячейка преобразовывает произвольный объект в текстовое представление. То, как ячейка выводит на экран объект, зависит от того, имеет ли ячейка связанное средство форматирования. Если ячейка не имеет никакого средства форматирования, ячейка выводит на экран свое содержание при помощи локализованного представления объекта. Если ячейка имеет средство форматирования, ячейка получает отформатированную строку из средства форматирования. Когда пользователь вводит текст в ячейку, ячейка преобразовывает текст в основной объект с помощью его средства форматирования.

Самый простой способ использовать средство форматирования находится в Интерфейсном Разработчике для перетаскивания его от палитры на управление, такое как текстовое поле или столбец в табличном представлении.

Чтобы создать средство форматирования возражают программно и присоединить его к ячейке, Вы выделяете экземпляр средства форматирования и устанавливаете его формат или стиль, как Вы желаете. Вы тогда используете NSCell setFormatter: метод для соединения экземпляра средства форматирования с ячейкой. Следующий пример кода создает и конфигурирует экземпляр NSNumberFormatter, и применяет его к ячейке NSTextField объект с помощью setFormatter: метод.

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[[textField cell] setFormatter:numberFormatter];

Точно так же можно создать и сконфигурировать экземпляр NSDateFormatter возразите программно. Следующий пример создает средство форматирования даты, тогда связывает его с ячейками формы (contactsForm).

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
[[contactsForm cells] makeObjectsPerformSelector:@selector(setFormatter:)
         withObject:dateFormatter]

Когда ячейка с объектом средства форматирования копируется, новая ячейка делает сильную ссылку на объект средства форматирования вместо того, чтобы копировать ее.

Когда ячейка должна вывести на экран или отредактировать свое значение, она передает свой объект средству форматирования, возвращающему отформатированную строку. Когда пользователь вводит строку, или когда строка программно записана в ячейке (использование setStringValue), ячейка получает соответствующий объект из средства форматирования.

Методы делегации для обработки ошибок

NSControl имеет методы делегата для ошибок из-за неправильного обращения, возвращенных в реализациях NSFormatter getObjectValue:forString:errorDescription:, isPartialStringValid:proposedSelectedRange:originalString:originalSelectedRange:errorDescription:, и isPartialStringValid:newEditingString:errorDescription: методы. Эти методы делегации, соответственно, control:didFailToFormatString:errorDescription: и control:didFailToValidatePartialString:errorDescription:.