Реализация Target
Поле поиска является объектом управления и так использует образец целевого действия: когда пользователь делает что-то для активации поля поиска, оно отправляет сообщение действия в целевой объект, говоря ему выполнить поиск. Кроме вызова метода действия, NSSearchFieldCell
и NSSearchField
не предоставьте поддержку для текстовых поисков. Необходимо реализовать поисковое поведение сами.
Простой поиск
Обычно Вы реализуете метод действия в объекте контроллера в Вашем приложении. Необходимо узнать то, что строка поиска, и затем выполните поиск с помощью критерия поиска, как проиллюстрировано в Перечислении 1.
Перечисление 1 Простой метод действия для цели поля поиска
- (IBAction)updateFilter:sender { |
NSString *searchString = [searchField stringValue]; |
/* |
Method continues to perform the search and display the results. |
*/ |
} |
Поиск Используя поисковую категорию
Если Вы хотите поддерживать поисковые категории (см. Указание Поисковой Категории), необходимо реализовать метод действия, вызванный элементами меню категорий, а также которые вызывают самим полем поиска. Ваш метод действия категории должен записать в некотором роде пункт меню, выбранный (обычно путем запоминания тега элемента). Вы могли бы также установить строку заполнителя для поискового меню (обычно к заголовку пункта меню, для напоминания пользователю, какой элемент они выбрали), как проиллюстрировано в Перечислении 2.
Пример перечисления 2 ищет метод пункта действия меню категорий
- (IBAction)setSearchCategoryFrom:(NSMenuItem *)menuItem { |
self.searchCategory = [menuItem tag]; |
[[self.searchField cell] setPlaceholderString:[menuItem title]]; |
} |
В методе действия поля поиска необходимо узнать то, что строка поиска, и затем выполните поиск с помощью критерия поиска, приняв во внимание любую категорию, которая, возможно, была установлена. Распространенный способ представлять поиск как экземпляр NSPredicate
. В перечислении 3, searchCategory
установлен в setSearchCategoryFrom:
метод проиллюстрирован в Перечислении 2.
Метод действия перечисления 3 В качестве примера для цели поля поиска
- (IBAction)updateFilter:sender { |
/* |
Create a predicate based on what is the current string in the |
search field and the value of searchCategory. |
*/ |
NSString *searchString = [self.searchField stringValue]; |
NSPredicate *predicate; |
if ((searchString != nil) && (![searchString isEqualToString:@""])) { |
if (searchCategory == 1) { |
predicate = [NSPredicate predicateWithFormat: |
@"firstName contains[cd] %@", searchString]; |
} |
if (searchCategory == 2) { |
predicate = [NSPredicate predicateWithFormat: |
@"lastName contains[cd] %@", searchString]; |
} |
} |
/* |
Method continues to perform the search and display the results. |
*/ |
} |
Кнопка отмены
Щелчок по кнопке отмены ведет себя точно, как будто пользователь выбрал весь текст в поле и удалил его. Сообщение действия отправляется в цель, как обычно. Цель обычно видела бы, что строка в поле является пустой строкой, и так ничего не отфильтровала бы.