Сортировать контакты в алфавитном порядке с разделом UITableView

У меня есть NSMutableArray: self.contact с объектами (имя отсортировано в алфавитном порядке):

(
    "Anna Haro",
    "Cheesy Cat",
    "Daniel Higgins",
    "David Taylor",
    "Freckles Dog",
    "Hank Zakroff",
    "John Appleseed",
    "Kate Be\U00e9ll"
)

Мне удалось отобразить справа алфавит с этой строкой кода:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
        return[NSArray arrayWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z", nil];
    }

Теперь я должен реализовать метод, который позволяет мне получить доступ к хорошему разделу?

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString*)title atIndex:(NSInteger)index {

}

И, может быть, я должен изменить число разделов? Вот мой код:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1
}

следующий:

Я сделал два массива: NSArray *test = [self.contact sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];:

(
    "Anna Haro",
    "Cheesy Cat",
    "Daniel Higgins",
    "David Taylor",
    "Freckles Dog",
    "Hank Zakroff",
    "John Appleseed",
    "Kate Be\U00e9ll"
)

а также

NSMutableDictionary dicoAlphabet:

// Dictionary will hold our sub-arrays
    self.dicoAlphabet = [NSMutableDictionary dictionary];

    // Iterate over all the values in our sorted array
    for (NSString *value in test) {

        // Get the first letter and its associated array from the dictionary.
        // If the dictionary does not exist create one and associate it with the letter.
        NSString *firstLetter = [value substringWithRange:NSMakeRange(0, 1)];
        NSMutableArray *arrayForLetter = [self.dicoAlphabet objectForKey:firstLetter];
        if (arrayForLetter == nil) {
            arrayForLetter = [NSMutableArray array];
            [self.dicoAlphabet setObject:arrayForLetter forKey:firstLetter];
        }

        // Add the value to the array for this letter
        [arrayForLetter addObject:value];
    }

    // arraysByLetter will contain the result you expect
    NSLog(@"Dictionary: %@", self.dicoAlphabet);

возвращает:

Dictionary: {
    A =     (
        "Anna Haro"
    );
    C =     (
        "Cheesy Cat"
    );
    D =     (
        "Daniel Higgins",
        "David Taylor"
    );
    F =     (
        "Freckles Dog"
    );
    H =     (
        "Hank Zakroff"
    );
    J =     (
        "John Appleseed"
    );
    K =     (
        "Kate Be\U00e9ll"
    );
}

1 ответ

Решение

Попробуйте следующую ссылку. Поможет вам сделать это довольно легко. Дайте мне знать, если у вас есть какие-либо проблемы, пока вы делаете это. Учебник для заголовков секций контроллера представления контактов и индекса

Так что для не статических данных, скажем, у вас есть массив контактов с именем arrContacts, то вы можете легко отсортировать его с помощью [arrContacts sortUsingSelector: @selector( localizedCaseInsensitiveCompare:)] Теперь, чтобы получить массив со всеми заголовками разделов, просто переберите массив, и для каждого объекта обрежьте строку до первой буквы и добавьте в этот массив, если его там еще нет. Вот и все, теперь у вас есть список разделов в одном массиве и отсортированные по алфавиту контакты в другом. Дайте мне знать, как это происходит.;)

Другие вопросы по тегам