Какао Touch UITableView по алфавиту '#' Совпадение всех непревзойденных - PullRequest
1 голос
/ 22 апреля 2010

У меня есть UITableView, содержащий имена, которые я хотел бы сгруппировать (и отсортировать) по первой букве (аналогично приложению Адресной книги). В настоящее время я могу сопоставить любой раздел ('A' - 'Z'), используя:

// Sections is an array of strings "{search}" and "A" to "Z" and "#".
NSString *pattern = [self.sections objectAtIndex:section];
NSPredicate *predicate = nil;

// Ignore search pattern.
if ([pattern isEqualToString:@"{search}"]) return nil;

// Non-Alpha and Non-Diacritic-Alpha (?).
if ([pattern isEqualToString:@"#"]);

// Default case (use case and diacritic insensitivity).
if (!predicate) predicate = [NSPredicate predicateWithFormat:@"name beginswith[cd] %@", pattern];

// Return filtered results.
return [self.friends filteredArrayUsingPredicate:predicate];

Однако совпадение для «#» ускользает от меня. Я попытался построить совпадение с использованием REGEX:

[NSPredicate predicateWithFormat:@"name matches '[^a-zA-Z].*'"];

Но это не работает для диакритического альфа (появляются повторяющиеся строки). Благодарим за любую идею! Спасибо.

1 Ответ

6 голосов
/ 22 апреля 2010

Я обычно использую UILocalizedIndexedCollation и пользовательскую категорию NSArray для решения этой проблемы.У меня также есть оболочка (декоратор) для UILocalizedIndexedCollation, которая будет включать в себя символ поиска и обрабатывать смещения для этого для вас.

Реализация моей категории NSArray находится здесь: http://gist.github.com/375409

Итак, учитывая массив объектов objects со свойством name, я бы создал индексированный массив следующим образом:

UILocalizedIndexedCollation *collation = [UILocalizedIndexedCollation currentCollation];
NSArray *indexedObjects = [objects indexUsingCollation:collation withSelector:@selector(name)]; // returns an array of arrays

Важно отметить, что UILocalizedIndexedCollation уже имеет дело с логикойИндексирование и группирование ваших объектов локализованным образом, поэтому нет необходимости заново изобретать колесо.

Мой декоратор сопоставления, который имеет дело со значком поиска, можно найти в этом github gist .

Более подробное руководство по его использованию можно найти в моем блоге .

В этом случае вы просто передаете экземпляр моей обертки для сопоставления вместо UILocalizedIndexedCollationв приведенном выше примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...