UITableView: Obsługa wyboru komórek w tabeli mieszanych komórek, wyświetlanie komórek statycznych i dynamicznych
Próbuję łączyć dynamiczne i statyczne komórki w zgrupowanym widoku tabeli: chciałbym je uzyskaćdwie sekcje z komórkami statycznymi na górze, a następniesekcja komórek dynamicznych (patrz zrzut ekranu poniżej). Ustawiłem zawartość widoku tabeli nakomórki statyczne.
EdytowaćNa podstawie rady AppleFreak zmieniłem kod w następujący sposób:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell;
if (indexPath.section <= 1) { // section <= 1 indicates static cells
cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
} else { // section > 1 indicates dynamic cells
CellIdentifier = [NSString stringWithFormat:@"section%idynamic",indexPath.section];
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
}
return cell;
}
Jednak moja aplikacja ulega awarii z komunikatem o błędzie
Zakończenie aplikacji z powodu nie przechwyconego wyjątku „NSInternalInconsistencyException”, powód: „UITableView dataSource musi zwrócić komórkę z tableView: cellForRowAtIndexPath:”
dla sekcji 0 i wiersza 0. Komórka zwrócona zcell = [super tableView:tableView cellForRowAtIndexPath:indexPath]
dla sekcji 0 i wiersza 0 jestnil
.
Co jest nie tak z moim kodem? Czy mogą być jakieś problemy z moimi punktami sprzedaży? Nie ustawiłem żadnych punktów sprzedaży, ponieważ subklasujęUITableViewController
i podobno nie ma żadnych gniazd do ustawienia widoku tabeli (?). Jakieś sugestie, jak to zrobić lepiej?
Odtworzyłem moją scenę w serii ujęć (zapoznaj się z moim zaktualizowanym zrzutem ekranu powyżej) i przepisałem kontroler widoku, aby rozpocząć od nowej bazy. Przeczytałem również opis na forum Apple, jak zasugerował applefreak. Jednak uruchamiam swój pierwszy problem z tą metodąnumberOfSectionsInTableView:tableView
, w którym zwiększam liczbę sekcji statycznych (dwie) o jeden.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [super numberOfSectionsInTableView:tableView] + 1 ; }
Aplikacja uległa awarii z komunikatem o błędzie:
Aplikacja kończąca z powodu nie przechwyconego wyjątku „NSRangeException”, powód: „*** - [__ NSArrayI objectAtIndex:]: indeks 2 poza granicami [0 .. 1]”
Dlaczego ten kod nie działa dla mnie, mimo że przestrzegałem zaleceń Apple i Applefreak? Możliwe, że tableView zmienił się nieco w iOS 6?
Rozwiązanie: Udało mi się to teraz uruchomić za pomocą przykładowego kodu AppleFreaks w jego odpowiedzi poniżej. Dziękuję, AppleFreak!
Edytuj III: Wybór komórki:Jak mogę sobie poradzićwybór komórek w mieszanym (komórki dynamiczne i statyczne) widoku tabeli komórek? Kiedy zadzwonię?super
i kiedy zadzwonięself tableView
? Kiedy używam
[[super tableView] selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]
i spróbuj sprawdzić wybrane ścieżki indeksu za pomocą:
UITableView *tableView = [super tableView];
if ( [[tableView indexPathForSelectedRow] isEqual:customGrowthIndexPath] ) { .. }
Dostaję zwrotną wartośćnil
.
Ponieważ nie mogę znaleźć źródła mojego błędu, naprawdę byłbym wdzięczny za pomoc