Подтвердить что ты не робот

Сделать UITableView прокручиваемым по индексу

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

screenshot

Мне интересно, не пропустил ли я что-то, поэтому мне интересно, есть ли что-то еще, что я должен сделать, или что-то в этом роде.

#pragma - TableView Index Scrolling

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

    if(searching)
        return nil;

    NSMutableArray *tempArray = [[NSMutableArray alloc] init];
    [tempArray addObject:@"A"];
    [tempArray addObject:@"B"];
    [tempArray addObject:@"C"];
    [tempArray addObject:@"D"];
    [tempArray addObject:@"E"];
    [tempArray addObject:@"F"];
    [tempArray addObject:@"G"];
    [tempArray addObject:@"H"];
    [tempArray addObject:@"I"];
    [tempArray addObject:@"J"];
    [tempArray addObject:@"K"];
    [tempArray addObject:@"L"];
    [tempArray addObject:@"M"];
    [tempArray addObject:@"N"];
    [tempArray addObject:@"O"];
    [tempArray addObject:@"P"];
    [tempArray addObject:@"Q"];
    [tempArray addObject:@"R"];
    [tempArray addObject:@"S"];
    [tempArray addObject:@"T"];
    [tempArray addObject:@"U"];
    [tempArray addObject:@"V"];
    [tempArray addObject:@"W"];
    [tempArray addObject:@"Y"];
    [tempArray addObject:@"X"];
    [tempArray addObject:@"Z"];

    return tempArray;
}

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

    if(searching)
        return -1;

    return index % 2;
}
4b9b3361

Ответ 1

Представление таблицы нужно сгруппировать по алфавиту, я верю - массив temp не знает, как перевести букву, выбранную вами в определенный индекс (он не знает, что такое "a", "b" или "c" ).

Если вы посмотрите на список песен iPod, вы заметите, что каждая группа букв имеет разделитель разделов букв. Вам нужно сгруппировать ваши табличные объекты в разделы с буквами, чтобы перевести букву "A" в индекс. Фактически, список apple ipod - это не прокрутка к первой записи "A" , а начало раздела "A" .

Ответ 2

Вы можете использовать этот

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

Что сообщает таблице, какой раздел соответствует заголовку/индексу раздела (например, "B", 1))

Этот метод предназначен для возврата раздела, соответствующего заголовку. Но вы хотите прокрутить строку одного раздела в соответствии с этими заголовками. Итак, выполните следующие действия:

  • Создать глобальный массив означает объявить его в .h файле

    NSMutableArray *alphabetsArray;
    NSMutableArray *dataArray; //--This contain your cell value i.e. Honda,Mazda--//
    
  • Определите его в методе viewDidLoad, как показано ниже, затем верните его из метода UITableView.

    alphabetsArray = [[NSMutableArray alloc] init];
    [alphabetsArray addObject:@"A"];
    [alphabetsArray addObject:@"B"];
    [alphabetsArray addObject:@"C"];
    [alphabetsArray addObject:@"D"];
    [alphabetsArray addObject:@"E"];
    [alphabetsArray addObject:@"F"];
    [alphabetsArray addObject:@"G"];
    [alphabetsArray addObject:@"H"];
    [alphabetsArray addObject:@"I"];
    [alphabetsArray addObject:@"J"];
    [alphabetsArray addObject:@"K"];
    [alphabetsArray addObject:@"L"];
    [alphabetsArray addObject:@"M"];
    [alphabetsArray addObject:@"N"];
    [alphabetsArray addObject:@"O"];
    [alphabetsArray addObject:@"P"];
    [alphabetsArray addObject:@"Q"];
    [alphabetsArray addObject:@"R"];
    [alphabetsArray addObject:@"S"];
    [alphabetsArray addObject:@"T"];
    [alphabetsArray addObject:@"U"];
    [alphabetsArray addObject:@"V"];
    [alphabetsArray addObject:@"W"];
    [alphabetsArray addObject:@"Y"];
    [alphabetsArray addObject:@"X"];
    [alphabetsArray addObject:@"Z"];
    

    [ Примечание: Вы также можете создать alphabetsArray с динамическим содержит в соответствии с вашим dataArray. Для этого следуйте Как мы можем создать массив заголовков индексов динамических разделов ниже]

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

    - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
        return alphabetsArray;
    }
    
  • Напишите свою логику для прокрутки UITableView

    - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
        for (int i = 0; i< [dataArray count]; i++) {
            // Here you return the name i.e. Honda,Mazda 
            // and match the title for first letter of name
            // and move to that row corresponding to that indexpath as below
            NSString *letterString = [[dataArray objectAtIndex:i] substringToIndex:1];
            if ([letterString isEqualToString:title]) {
                [tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
                break;
            }
        }
        return -1;
    }
    

**** Как мы можем создать массив заголовков индексов динамических разделов ****

  • Предположим, что dataArray подобен этому

    [@"Honda",@"Maruti",@"Mazda",@"Toyota",.....]  
    
  • Создайте метод создания массива титров динамических разделов ниже

    - (void)createAlphabetArray;
    
  • Реализует метод createAlphabetArray, как показано ниже

    #pragma mark - Create Alphabet Array
    - (void)createAlphabetArray {
        NSMutableArray *tempFirstLetterArray = [[NSMutableArray alloc] init];
        for (int i = 0; i < [dataArray count]; i++) {
            NSString *letterString = [[dataArray objectAtIndex:i] substringToIndex:1];
            if (![tempFirstLetterArray containsObject:letterString]) {
                [tempFirstLetterArray addObject:letterString];
            }
        }
        alphabetsArray = tempFirstLetterArray;
        [tempFirstLetterArray release];
    }
    
  • Теперь просто назовите его где угодно, если вы хотите изменить алфавитыArray содержит

    [self createAlphabetArray]; 
    

Теперь вы можете динамически создавать массив заголовков индексов раздела в соответствии с вашим содержимым dataArray.

Ответ 3

Вы можете попробовать:

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

Трудно сказать, что случилось без остального вашего контроллера, но я думаю, что это должно сработать.