UITableView: Behandeln Sie die Zellenauswahl in einer Tabelle mit gemischten Zellen. Zeigen Sie statische und dynamische Zellen an
Ich versuche, dynamische und statische Zellen in einer gruppierten Tabellenansicht zu mischen: Ich möchte erhaltenzwei Abschnitte mit statischen Zellen oben gefolgt von aAbschnitt der dynamischen Zellen (Bitte beachten Sie den Screenshot unten). Ich habe den Inhalt der Tabellenansicht auf gesetztstatische Zellen.
BearbeitenAuf Empfehlung von AppleFreak habe ich meinen Code wie folgt geändert:
- (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;
}
Meine App stürzt jedoch mit einer Fehlermeldung ab
Beenden der App aufgrund einer nicht erfassten Ausnahme "NSInternalInconsistencyException", Grund: "UITableView dataSource muss eine Zelle aus tableView zurückgeben: cellForRowAtIndexPath:"
für Abschnitt 0 und Zeile 0. Die Zelle, von der zurückgegeben wurdecell = [super tableView:tableView cellForRowAtIndexPath:indexPath]
für Abschnitt 0 und Zeile 0 istnil
.
Was ist los mit meinem Code? Könnte es Probleme mit meinen Verkaufsstellen geben? Ich habe keine Verkaufsstellen eingestellt, weil ich Unterklassen habeUITableViewController
und angeblich keine ausgänge für tableview setzen (?). Irgendwelche Vorschläge, wie man es besser macht?
Ich habe meine Szene im Storyboard neu erstellt (siehe den aktualisierten Screenshot oben) und den View Controller neu geschrieben, um von einer neuen Basis aus zu starten. Ich habe auch die Beschreibung in Apples Forum gelesen, wie Applefreak vorschlug. Allerdings starte ich bei meinem ersten Problem mit der MethodenumberOfSectionsInTableView:tableView
, wobei ich die Anzahl der statischen Abschnitte (zwei) um eins erhöhe.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [super numberOfSectionsInTableView:tableView] + 1 ; }
Die App ist mit folgender Fehlermeldung abgestürzt:
App wird aufgrund einer nicht erfassten Ausnahme 'NSRangeException' beendet, Grund: '*** - [__ NSArrayI objectAtIndex:]: Index 2 jenseits der Grenzen [0 .. 1]'
Warum funktioniert dieser Code bei mir nicht, obwohl ich die Empfehlungen von Apple und AppleFreak befolgt habe? Ist es möglich, dass sich die tableView in iOS 6 etwas geändert hat?
Lösung: Ich habe dies jetzt mit AppleFreaks-Codebeispiel in seiner Antwort unten zum Laufen gebracht. Vielen Dank, AppleFreak!
Edit III: Zellauswahl:Wie kann ich damit umgehen?Zellauswahl in einer gemischten (dynamischen und statischen) Zelltabellenansicht? Wann rufe ich an?super
und wann rufe ich anself tableView
? Wenn ich benutze
[[super tableView] selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]
und versuchen Sie, nach den ausgewählten Indexpfaden zu suchen mit:
UITableView *tableView = [super tableView];
if ( [[tableView indexPathForSelectedRow] isEqual:customGrowthIndexPath] ) { .. }
Ich erhalte einen Rückgabewert vonnil
.
Da ich die Ursache meines Fehlers nicht finden kann, würde ich mich sehr über Ihre Hilfe freuen