Конфигурирование поискового меню
Поле поиска имеет меню, к которому пользователи могут получить доступ путем щелчка по небольшому треугольнику рядом с кнопкой поиска. Элементы в этом раскрываются, меню значка имеют две цели: перечислять недавно введенные строки поиска и перечислять поисковые категории для ограничения объема поиска. Когда поле поиска отправляет свое сообщение действия, можно также указать.
Генерация сообщений действия
Поле поиска имеет два режима для генерации сообщений действия:
Первый режим подобен текстовому полю; сообщение отправляется, когда пользователь щелкает по кнопке поиска или нажимает Return, когда точка вставки находится в поле поиска.
Второй режим, который является значением по умолчанию, для инкрементных поисков; поле поиска отправляет сообщение действия при каждом нажатии клавиши.
Обычно Вы устанавливаете режим в xib файле (см. Добавление Поля поиска к Вашему Приложению). Для установки режима генерации сообщения программно отправить setSendsWholeSearchString:
к ячейке поля поиска с параметром NO
для инкрементных поисков и YES
для регулярных поисков.
Конфигурирование шаблона меню
При указании меню кнопка поиска выводит на экран индикатор меню, и поисковое меню раскрывается, когда пользователь щелкает по кнопке поиска. Не изменяйте меню, в то время как оно используется полем поиска (потому что поле поиска не делает копию меню).
Для конфигурирования всплывающего меню создайте шаблон меню (который является NSMenu
объект), и заполняют шаблон меню с элементами (NSMenuItem
объекты), Вы хотите появиться. Можно добавить предопределенные элементы к меню путем создания пункта меню и установки его тега в одно из следующих значений (описанный в разделе Constants NSSearchFieldCell
ссылка):
NSSearchFieldRecentsTitleMenuItemTag
: указывает пункт меню, который является заголовком группы меню для недавних строк поиска (элемент скрыт, при отсутствии недавних строк);NSSearchFieldRecentsMenuItemTag
: идентифицирует, где недавние строки поиска должны появиться в «recents» группе меню (элемент скрыт, при отсутствии недавних строк);NSSearchFieldClearRecentsMenuItemTag
: указывает, что пункт меню раньше очищал существующие недавние элементы;NSSearchFieldNoRecentsMenuItemTag
: пункт меню, описывающий отсутствие недавних строк поиска (например, “Никакие недавние поиски”).
Можно указать шаблон меню, используемый при генерации всплывающего меню в поле поиска. Это легко сделано с XCode, или, если Вы программно создали шаблон меню, вызвать setSearchMenuTemplate:
устанавливать его в поле поиска.
Можно также сделать все это программно. Перечисление 1 иллюстрирует, как Вы могли бы установить поисковый шаблон меню.
Перечисление 1 , Устанавливающее меню, обрабатывает по шаблону для недавних строк поиска
- (void) awakeFromNib |
{ |
NSMenu *cellMenu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"Search Menu", @"Search Menu title")]; |
NSMenuItem *item; |
item = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Clear", @"Clear menu title") |
action:NULL keyEquivalent:@""]; |
[item setTag:NSSearchFieldClearRecentsMenuItemTag]; |
[cellMenu insertItem:item atIndex:0]; |
item = [NSMenuItem separatorItem]; |
[item setTag:NSSearchFieldRecentsTitleMenuItemTag]; |
[cellMenu insertItem:item atIndex:1]; |
item = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Recent Searches", @"Recent Searches menu title") |
action:NULL keyEquivalent:@""]; |
[item setTag:NSSearchFieldRecentsTitleMenuItemTag]; |
[cellMenu insertItem:item atIndex:2]; |
item = [[NSMenuItem alloc] initWithTitle:@"Recents" |
action:NULL keyEquivalent:@""]; |
[item setTag:NSSearchFieldRecentsMenuItemTag]; |
[cellMenu insertItem:item atIndex:3]; |
id searchCell = [searchField cell]; |
[searchCell setSearchMenuTemplate:cellMenu]; |
} |
Меню связано с Вашим полем поиска, только если Вы указываете один в xib файле. Если Вы создаете поле поиска программно и не хотите меню, устанавливаете шаблон меню в nil
.
Указание поисковой категории
Для установки поисковой категории Вы создаете пункт меню с заголовком и селектором действия и добавляете его к шаблону меню. Селектор действия идентифицирует метод, вызывающийся с помощью целевого действия, когда пользователь выбирает элемент; в этом методе можно установить флаг или другое значение так, чтобы поисковая реализация знала, как ограничить объем ее поиска. Обычно Вы добавили бы пункт меню к шаблону меню в xib файле. Можно также сделать это программно, как проиллюстрировано в Перечислении 2. Это полезно, если Вы создаете или обновляете меню динамично, например если категории зависят от того, какие столбцы таблицы видимы в табличном представлении.
Перечисление 2 , Устанавливающее меню, обрабатывает по шаблону с поисковой категорией
- (void) awakeFromNib |
{ |
NSMenu *cellMenu = [[NSMenu alloc] initWithTitle:NSLocalizedString(@"Search Menu", @"Search Menu title")]; |
NSMenuItem *item; |
item = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"First Name", @"First Name menu title") |
action:@selector(setSearchCategoryFrom:) keyEquivalent:@""]; |
[item setTarget:self]; |
[item setTag:1]; |
[cellMenu insertItem:item atIndex:0]; |
item = [[NSMenuItem alloc] initWithTitle:NSLocalizedString(@"Last Name", @"Last Name menu title") |
action:@selector(setSearchCategoryFrom:) keyEquivalent:@""]; |
[item setTarget:self]; |
[item setTag:2]; |
[cellMenu insertItem:item atIndex:1]; |
id searchCell = [searchField cell]; |
[searchCell setSearchMenuTemplate:cellMenu]; |
} |
Теги являются дополнительными для поисковых категорий, но они позволяют Вам легко различать между пунктами меню в методе действия. Если Вы принимаете решение указать теги, их значения не должны совпадать ни с одним из значений NSSearchFieldRecentsTitleMenuItemTag
, NSSearchFieldRecentsMenuItemTag
, NSSearchFieldClearRecentsMenuItemTag
, или NSSearchFieldNoRecentsMenuItemTag
.
Также необходимо реализовать метод действия, вызванный пунктом меню — посмотрите, что Поиск Использует Поисковую Категорию.