2011-09-13 11 views
17

Próbuję utworzyć indeks UITableView szybsze przewijanie dużego UITableView, mam wskaźnik pokazujący się po prawej stronie, ale gdy próbuję przejść z nim, to nie działa ..Bądź UITableView przewijania przez indeks

screenshot

Zastanawiam się, czy coś przeoczyłem, więc zastanawiam się, czy jest coś jeszcze, co muszę zrobić, czy coś w tym stylu.

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

Odpowiedz

10

Widok tabeli należy pogrupować alfabetycznie Wierzę - tablica temp nie wie, jak przetłumaczyć wybraną literę na konkretny indeks (nie wie, co to "a", "b" lub "c" oznacza).

Jeśli spojrzysz na listę utworów iPoda, zauważysz, że każda grupa liter ma dzielnik sekcji literowej. Aby przetłumaczyć literę "A" na indeks, musisz pogrupować obiekty tabeli w sekcje oznaczone literami. To, co faktycznie robi lista iPodów Apple'a, nie jest przewijane do pierwszego wpisu "A", ale początek sekcji "A".

+0

okej, pomyślałem, że mogło być, dzięki za twoją odpowiedź .. wygląda na to, że będę musiał przeczytaj, żeby to zrozumieć. Jeśli znasz jakieś przykłady w Internecie i posiadasz link, bardzo bym to docenił. –

+0

Ah Widzę, że to jest to, co oni wydają się robić w tym kroku, myślę. Http: //www.iphonesdkarticles.com/2009/01/uitableview-sectioned-table-view.html –

+0

Tak, dokładnie, to wszystko. –

2

Można spróbować:

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

Trudno powiedzieć, co jest nie tak bez końca swojego kontrolera, ale myślę, że powinno działać.

+1

to nie zadziałało niestety .. –

+0

Czy Twój widok tabeli jest zgrupowany lub zwykły? –

+0

zwykły, to jest zrzut ekranu z tego w moim pytaniu .. myślisz, że to dlatego, że mam identyczne wartości? –

43

Można użyć tej

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

który mówi tabelę, która część odpowiada sekcji tytułu/indeksu (np „B”, 1))

ta metoda jest dla powracających sekcję odpowiadającą Tytuł. Ale chcesz przewinąć wiersz pojedynczej sekcji zgodnie z tymi tytułami. Więc wykonaj następujące kroki:

  1. Tworzenie globalną tablicę oznacza zadeklarować je w pliku .h

    NSMutableArray *alphabetsArray; 
    NSMutableArray *dataArray; //--This contain your cell value i.e. Honda,Mazda--// 
    
  2. zdefiniować go w sposób jak poniżej viewDidLoad następnie odesłać go z metodą 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"]; 
    

    [Uwaga: Możesz również więc utwórz alphabetsArray z dynamicznym zawierającą zgodnie z twoją dataArray.W tym celu wykonaj Jak możemy tworzenia dynamicznych tytułów Indeks cyklu tablicę w temperaturze poniżej]

  3. teraz użyć powyższej metody, aby zdobyć tytuł

    - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { 
        return alphabetsArray; 
    } 
    
  4. Napisz swoją logikę do przewijania 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; 
    } 
    

**** Jak możemy stworzyć dynamiczne tytuły Indeks cyklu tablicę ****

  1. Załóżmy, że DataArray jest tak

    [@"Honda",@"Maruti",@"Mazda",@"Toyota",.....] 
    
  2. Tworzenie metody tworzenia dynamicznej sekcji tytuły indeksowych tablica poniżej

    - (void)createAlphabetArray; 
    
  3. Narzędziami createAlphabetArray Sposób poniżej

    0.123.
    #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]; 
    } 
    
  4. Teraz wystarczy wywołać go w dowolnym miejscu, gdy chcesz zmienić alphabetsArray zawiera

    [self createAlphabetArray]; 
    

Teraz można tworzyć dynamiczne tytuły Indeks cyklu tablicę dynamicznie w zależności od zawartości DataArray.

+0

Awesome ... zrobiłeś wszystko tak jasne, że już nie muszę zaglądać do żadnego samouczka ... Dziękuję :) – NightFury

+0

Dzięki za komentarze –

+0

Bardzo dobre wyjaśnienie, rozwiązałem mój problem. Dziękuję Ci. –

Powiązane problemy