Я в настоящее время пытаюсь реализовать a UITableView
с делегатом и источником данных, который копирует, максимально тесно, функциональность нашла ABAddressBookUI
платформа ABPeoplePickerNavigationController
класс, но с добавленной способностью выбрать несколько контактов сразу (как обозначено путем добавления/удаления вспомогательного представление к соответствующему UITableViewCell
).
Все хорошо работает, за исключением обеспечения локализованных "индексных заголовков раздела" (буквы, которые появляются в наложении прокрутки направо от экрана) для UITableView
, как должен быть возвращен по условию исходный метод:
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
Очевидно, я мог просто возвратиться NSArray
содержа NSStrings
A, B, C... Z, но я идеально хотел бы, чтобы этот метод возвратил массив всего из (верхний регистр, где применимый) буквы алфавита текущей локали.
Один многообещающий вывод был:
[[
NSLocale
currentLocale ] objectForKey:@"NSLocaleExemplarCharacterSet" ]
Но я не могу найти значительную документацию относительно этого, и она возвращается NSCharacterSet
, из которого я не мог извлечь фактические символы (если я мог бы сделать это, затем NSCharacterSet capitalizedLetterCharacterSet
могла также быть многообещающая начальная точка).
Я также работал otool -tV
на AddressBookUI
платформа, которая показала вызов к функции ABAddressBookCopySectionIndices()
, в который ABAddressBookRef
может быть передан для получения точно, что я ищу … CFArray локализованного алфавита. Однако это - закрытая функция, таким образом, я не могу использовать его в своем приложении.
Так, кто-либо знает, поддерживает ли Касание Какао эту функциональность? И, в противном случае есть ли любые идеи относительно как ABAddressBookCopyIndices()
работает его волшебство? Я подозреваю, что библиотека International Components for Unicode может удержать клавишу, но я не (пока еще) знаком с ее возможностями...
Пожалуйста, не думайте, что индексы раздела должны быть «заглавными буквами». Это справедливо только для некоторых европейских языков. Например, японский или китайский не имеют понятия заглавных букв, у них просто слишком много букв для начала, но есть обычный набор меток, обычно используемых в реальных словарях или реальных адресных книгах.
Вместо этого используйте стандартный UILocalizedIndexedCollation. Он дает именно то, что вам нужно.
Заскучает и написал это для вас
NSArray * charactersInCharacterSet(NSCharacterSet *charSet)
{
NSMutableArray * array = [NSMutableArray array];
NSData * data = [charSet bitmapRepresentation];
const char* bytes = [data bytes];
for (int i = 0; i < 8192; ++i)
{
if (bytes[i >> 3] & (((unsigned int)1) << (i & 7)))
{
[array addObject:[NSString stringWithFormat:@"%C", i]];
}
}
return [NSArray arrayWithArray:array];
}
NSCharacterSet * charSet = [[[[NSLocale alloc] initWithLocaleIdentifier:@"sr_Cyrl_ME"] autorelease] objectForKey:NSLocaleExemplarCharacterSet];
NSArray * chars = charactersInCharacterSet(charSet);
for (NSString *str in chars)
{
NSLog(@"%@", str);
}
Это даст вам массив символов в наборе.