В настоящее время я заполняю свои ячейки таблицы содержимым нескольких массивов, представляющих имя, идентификатор и т. Д.
Мой вопрос возникает, когда я начинаю использовать контроллер дисплея поиска. У меня есть массив со списком имен, списком идентификаторов, списком штрих-кодов и списком псевдонимов. Когда пользователь вводит в строке поиска, мне нужно иметь возможность искать все 4 массива. Когда он находит результат в 1 массиве, он должен связать результат с 3 другими массивами.
Пример
- Имена (яблоко, морковь, банан, собака)
- псевдоним (красный, оранжевый, желтый, коричневый)
- штрих-код (1,2,10,20)
- id (30, 40, 50, 60)
Так что, если пользователь вводит "a", я должен заполнить табличное представление
Яблоко, Морковь, Банан и связанный с ним псевдоним, штрих-код, id.
Если пользователь наберет 2, я должен получить только
морковка и собака.
Если бы пользователь набрал 0, я бы получил все эти элементы.
Есть идеи, как этого добиться?
UPDATE:
Вот как я это сделал.
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
BOOL shouldReturn = FALSE;
[searchResults removeAllObjects];
for (int i = 0; i < [itemIDRows count]; i++) {
BOOL foundResult = FALSE;
if ([[itemIDRows objectAtIndex:i] rangeOfString:searchString].location != NSNotFound) {
foundResult = TRUE;
}
if ([[nameRows objectAtIndex:i] rangeOfString:searchString].location != NSNotFound) {
foundResult = TRUE;
}
if ([[barcodeRows objectAtIndex:i] rangeOfString:searchString].location != NSNotFound) {
foundResult = TRUE;
}
if ([[aliasRows objectAtIndex:i] rangeOfString:searchString].location != NSNotFound) {
foundResult = TRUE;
}
if (foundResult) {
NSNumber *result = [NSNumber numberWithInt:i];
if ([self searchResults] == nil) {
NSMutableArray *array = [[NSMutableArray alloc] init];
[self setSearchResults:array];
[array release];
}
[searchResults addObject:result];
shouldReturn = YES;
}
}
return shouldReturn;
}
Затем, когда я заполняю таблицу, я делаю что-то вроде этого
if ([tableView isEqual:self.searchDisplayController.searchResultsTableView]) {
[cell setCellContentsName:[NSString stringWithFormat:@"%@", [nameRows objectAtIndex:[[searchResults objectAtIndex:indexPath.row] integerValue]]];
} else {
[cell setCellContentsName:[NSString stringWithFormat:@"%@", [nameRows objectAtIndex:indexPath.row]];
}
Однако, когда я набираю что-то вроде 9999, это вызывает случаи, когда в идентификаторе или штрих-коде только 1 9. Есть идеи как это исправить?
UPDATE2:
Решил проблему, обновляя список всегда, а не перезагружая данные, только если был найден результат. Теперь работает отлично: D