Предоставление данных для поля комбинированного списка
Управление NSComboBox может быть установлено для заполнения раскрывающегося списка или из внутреннего списка элемента или из объекта, который Вы обеспечиваете, названный его источником данных. Укажите, чтобы использовать с setUsesDataSource:
. По умолчанию поле комбинированного списка использует внутренний список.
Если Вы указываете, что поле комбинированного списка использует внешний источник данных, и затем попытайтесь вызвать метод, использующий внутренний список — такой как addItemWithObjectValue:
— метод выдает исключение.
Работа с внешним источником данных
Внешний источник данных объявляет, что методы что использование поля комбинированного списка получают доступ к его данным. Используйте тот, если внутренний список не эффективен для Ваших данных. Внешний источник данных может сохранить свои элементы всегда, но он должен быть в состоянии идентифицировать их целочисленным индексом.
Чтобы указать, что поле комбинированного списка использует внешний источник данных, сначала используйте setUsesDataSource:
с YES
как параметр, затем используйте setDataSource:
с Вашим источником данных возражают как параметр. Если Вы используете setDataSource:
прежде setUsesDataSource:
, setDataSource:
выдает исключение.
Источник данных должен определить эти методы. Метод setDataSource:
регистрирует предупреждение, если его параметр не реализует их.
numberOfItemsInComboBox:
возвраты, сколько элементов для отображения.comboBox:objectValueForItemAtIndex:
возвращает объект, соответствующий указанному индексу.
Источник данных может дополнительно определить эти методы. Метод setDataSource
не проверяет на них, и поле комбинированного списка вызывает их, только если они доступны.
comboBox:indexOfItemWithStringValue:
возвращает индекс для элемента, соответствующего указанную строку. Если этот метод доступен, поле комбинированного списка выполняет инкрементные поиски, когда пользователь вводит в текстовое поле с раскрывающимся выведенным на экран списком.comboBox:completedString:
возвращает строку, начинающуюся с указанной строки. Если автозавершение включено, поле комбинированного списка пытается завершить то, что пользователь вводит в текстовое поле с элементом из раскрывающегося списка. Если этот метод не доступен, и автозавершение включено, поле комбинированного списка проходит через каждый элемент один за другим для нахождения завершения.
И вот некоторые методы NSComboBox, в которых, возможно, нуждается Ваш источник данных, если он загружает данные в фоновом режиме:
noteNumberOfItemsChanged
сообщает полю комбинированного списка, что изменилось число элементов в источнике данных.reloadData
отмечает поле комбинированного списка, поскольку необходимость восстанавливает изображение, таким образом, это перезагружает данные для видимых раскрывающихся элементов и рисует новые значения.
Поле комбинированного списка обрабатывает объекты, предоставленные его источником данных как значения, которые будут выведены на экран в раскрывающемся списке поля комбинированного списка. Если эти объекты не будут иметь классов общей ценности — таких как строки, числа, и т.д. то — необходимо будет создать пользовательский NSFormatter для отображения их. Посмотрите Руководство по Форматированию данных для получения дополнительной информации.
Работа с внутренним списком
NSComboBox обеспечивает полный набор методов, позволяющих Вам добавлять, вставлять и удалять элементы во внутреннем списке элемента для полей комбинированного списка, не использующих источник данных:
Для добавления одного или более элементов до конца списка использовать
addItemWithObjectValue:
илиaddItemsWithObjectValues:
Для вставки элемента в середину списка использовать
insertItemWithObjectValue:atIndex:
Для нахождения индекса для определенного объекта использовать
indexOfItemWithObjectValue:
.Для нахождения объекта в определенном индексе использовать
itemObjectValueAtIndex:
.Для удаления элементов из списка использовать
removeAllItems
,removeItemAtIndex:
, илиremoveItemWithObjectValue:
.Для получения массива элементов всего списка использовать
objectValues
.Для получения числа элементов в списке использовать
numberOfItems
.
Если usesDataSource
возвраты YES
и Вы используете любой из вышеупомянутых методов, метод выдаст исключение. По умолчанию, usesDataSource
возвраты NO
.