Метод какао для возврата списка всех букв в алфавите текущей локали?

Я в настоящее время пытаюсь реализовать a UITableView с делегатом и источником данных, который копирует, максимально тесно, функциональность нашла ABAddressBookUI платформа ABPeoplePickerNavigationController класс, но с добавленной способностью выбрать несколько контактов сразу (как обозначено путем добавления/удаления вспомогательного представление к соответствующему UITableViewCell).

Все хорошо работает, за исключением обеспечения локализованных "индексных заголовков раздела" (буквы, которые появляются в наложении прокрутки направо от экрана) для UITableView, как должен быть возвращен по условию исходный метод:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView

Очевидно, я мог просто возвратиться NSArray содержа NSStrings A, B, C... Z, но я идеально хотел бы, чтобы этот метод возвратил массив всего из (верхний регистр, где применимый) буквы алфавита текущей локали.

Один многообещающий вывод был:

[[NSLocalecurrentLocale ] objectForKey:@"NSLocaleExemplarCharacterSet" ]

Но я не могу найти значительную документацию относительно этого, и она возвращается NSCharacterSet, из которого я не мог извлечь фактические символы (если я мог бы сделать это, затем NSCharacterSet capitalizedLetterCharacterSet могла также быть многообещающая начальная точка).

Я также работал otool -tV на AddressBookUI платформа, которая показала вызов к функции ABAddressBookCopySectionIndices(), в который ABAddressBookRef может быть передан для получения точно, что я ищу … CFArray локализованного алфавита. Однако это - закрытая функция, таким образом, я не могу использовать его в своем приложении.

Так, кто-либо знает, поддерживает ли Касание Какао эту функциональность? И, в противном случае есть ли любые идеи относительно как ABAddressBookCopyIndices() работает его волшебство? Я подозреваю, что библиотека International Components for Unicode может удержать клавишу, но я не (пока еще) знаком с ее возможностями...

11
задан Rich Pollock 1 July 2010 в 21:23
поделиться

2 ответа

Пожалуйста, не думайте, что индексы раздела должны быть «заглавными буквами». Это справедливо только для некоторых европейских языков. Например, японский или китайский не имеют понятия заглавных букв, у них просто слишком много букв для начала, но есть обычный набор меток, обычно используемых в реальных словарях или реальных адресных книгах.

Вместо этого используйте стандартный UILocalizedIndexedCollation. Он дает именно то, что вам нужно.

15
ответ дан 3 December 2019 в 05:56
поделиться

Заскучает и написал это для вас

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);
}

Это даст вам массив символов в наборе.

5
ответ дан 3 December 2019 в 05:56
поделиться