Фильтрация Используя пользовательский контроллер массива
Эта статья объясняет, как использовать поле поиска и пользовательский контроллер массива для фильтрации набора объектов. Несмотря на то, что Вы обычно используете поле поиска в сочетании с табличным представлением для реализации этого стиля интерфейса, задачи, обсужденные в этой статье, не ограничиваются этими компонентами.
Переопределение arrangeObjects:
arrangeObjects:
метод сортирует содержание контроллера массива с помощью текущих дескрипторов вида. Для ограничения выведенного на экран содержания подмножеством содержания, необходимо переопределить arrangeObjects:
, создайте новый массив, содержащий подмножество, и затем вызовите реализацию суперкласса arrangeObjects:
обеспечить любую надлежащую сортировку.
arrangeObjects:
реализация в Перечислении 1 выполняет привязанный поиск свойства заголовка. В привязанном поиске, только те объекты, свойство заголовка которых соответствует searchString
добавляются к возвращенному массиву.
Перечисление 1 , Фильтрующее реализацию arrangeObjects:
- (NSArray *)arrangeObjects:(NSArray *)objects { |
if (searchString == nil) { |
return [super arrangeObjects:objects]; |
} |
NSMutableArray *filteredObjects = [NSMutableArray arrayWithCapacity:[objects count]]; |
NSEnumerator *objectsEnumerator = [objects objectEnumerator]; |
id item; |
while (item = [objectsEnumerator nextObject]) { |
if ([[item valueForKeyPath:@"title"] rangeOfString:searchString options:NSAnchoredSearch].location != NSNotFound) { |
[filteredObjects addObject:item]; |
} |
} |
return [super arrangeObjects:filteredObjects]; |
} |
Обновление строки поиска
Вы реализуете search:
метод действия вызвать rearrangeObjects
, который инициировал вызов arrangeObjects:
метод.
Перечисление 2 показывает реализацию поиска: действие. searchString
установлен в строковое значение sender
объект, и rearrangeObjects
вызывается.
Перечисление 2 , Обновляющее searchString
- (void)search:(id)sender { |
// set the search string by getting the stringValue |
// from the sender |
[self setSearchString:[sender stringValue]]; |
[self rearrangeObjects]; |
} |
- (void)setSearchString:(NSString *)aString |
{ |
[aString retain]; |
[searchString release]; |
searchString=aString; |
} |
@end |
search:
действие вызывается NSSearchField. Цель поля поиска поставлена к контроллеру массива и действию к search:
метод. Поле поиска должно быть сконфигурировано так, чтобы оно не отправляло целую строку, когда оно изменяется. Превращение этой опции от причин search:
метод, который будет вызван каждый раз, когда нажатие клавиши происходит в поле поиска.