sectionIndexTitlesForTableView правильно выровнены с разделами - PullRequest
3 голосов
/ 15 ноября 2010

У меня есть табличное представление со многими разделами, заголовок для этих разделов - просто AZ и #, как в приложении для адресной книги iPhone.Я реализовал sectionIndexTitlesForTableView для быстрого перехода к конкретной букве и в основном просто возвращаю массив букв A - Z и #.

Это сработало бы, если бы в моем списке всегда был элемент для каждой буквы алфавита, но это не сработало, и это привело бы к искажению заголовков указателей разделов, потому что нажатие C в списке могло бы перейти к D, если 3-й разделD (то есть, если в разделе C ничего нет).

Я знаю, что мог бы вернуть массив в sectionIndexTitlesForTableView только с буквами, являющимися разделами, но это выглядело бы немного странно и не соответствовало бы функциональности адреса iPhoneкнижное приложение.

Как я могу исправить это?

Ответы [ 2 ]

6 голосов
/ 31 января 2012

Я не понимаю, как будет работать метод @Rudiger's, если у вас есть только разделы A, C, F, S, T и заголовки разделов для A-Z. Такая ситуация может возникнуть при использовании MPMediaQuery.

Чтобы обойти это, я реализовал этот метод следующим образом: просмотр таблицы перейдет к правильному разделу или следующему, если тот, который вы ищете, не существует.

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
    NSString *sectionTitle = nil;
    NSComparisonResult result;
    int i;

    for(i = 0; i < tableView.numberOfSections; i++)
    {
        sectionTitle = [self tableView:tableView titleForHeaderInSection:i];
        result = [title compare:sectionTitle];

        if(result != NSOrderedDescending)
            break;
    }

    return (MIN (i, (tableView.numberOfSections - 1)));
}

UPDATE

Изменено возвращаемое значение, чтобы исправить ситуацию, описанную Эриком Д'Суза.

3 голосов
/ 17 ноября 2010

В основном вы должны реализовать:

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
    return [sections indexOfObject:title];
}

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

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