Ich habe Probleme beim Animieren eines benutzerdefinierten UITableView-Abschnittsheaders.
Ziel war es, kollabierbare Abschnitte zu erstellen.
Wenn ich beim ersten Mal auf den benutzerdefinierten Header tippe, wie erwartet animiert, jedoch jedes Mal danach ein Duplikat am ursprünglichen Speicherort belässt und animiert einen anderen.UITableView Benutzerdefinierte Abschnittsüberschrift, doppeltes Problem
Bild Beispiel:
alt text http://img35.imageshack.us/img35/4018/screenshot2010022722565.png alt text http://img291.imageshack.us/img291/8287/screenshot2010022723035.png
My Custom Rubrik:
- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIView* customView = [[[UIView alloc]initWithFrame:CGRectMake(10.0, 0.0, 300.0, 44.0)]autorelease];
customView.backgroundColor = [UIColor lightGrayColor];
UILabel * headerLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
headerLabel.backgroundColor = [UIColor clearColor];
headerLabel.opaque = NO;
headerLabel.textColor = [UIColor darkGrayColor];
headerLabel.font = [UIFont boldSystemFontOfSize:16];
headerLabel.frame = CGRectMake(10, 7, 260.0, 44.0);
headerLabel.textAlignment = UITextAlignmentCenter;
NSDictionary *dictionary = [self.data objectAtIndex:section];
headerLabel.text = [dictionary objectForKey:@"Title"];
[customView addSubview:headerLabel];
// add button to right corner of section
UIButton* headerButton = [[UIButton alloc] initWithFrame:CGRectMake(10, 0, 320, 44)];
headerButton.center = CGPointMake(160.0, 22.0);
headerButton.backgroundColor = [UIColor clearColor];
headerButton.tag = section;
[headerButton addTarget:self action:@selector(expandSection:) forControlEvents:UIControlEventTouchUpInside];
[customView addSubview:headerButton];
return customView;
}
meine Animation Methode:
- (void) expandSection:(id)sender {
if (expandedSection == [sender tag]) {
expandedSection = -1;
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:[sender tag]] withRowAnimation:UITableViewRowAnimationNone];
}else if (expandedSection == -1){
expandedSection = [sender tag];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:[sender tag]] withRowAnimation:UITableViewRowAnimationNone];
}else{
[self.tableView beginUpdates];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:expandedSection] withRowAnimation:UITableViewRowAnimationNone];
expandedSection = [sender tag];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:[sender tag]] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
}
//[self.tableView reloadData];
}
Ich bin nicht ganz sicher, was los ist, aber die Instanzen deuten darauf hin, dass ich etwas zu tun habe. Ich habe ein paar Dinge ausprobiert, aber ich kann das nicht herausfinden. Jeder, der dabei helfen würde, wäre großartig!
Bearbeiten: Ich glaube, das Problem ist, dass ReloadSections verursacht die benutzerdefinierte Ansicht Instanz. Ich kann die Ansicht nicht freigeben, da ich sie als Referenz benötige, um das Update für die Animation auszuführen. Irgendwelche Ideen, was ich tun kann, um das zu beheben?
Danke das behebt ein verwandtes Problem, wo ich einen animierten Effekt des Löschens/Einfügens derselben Zeilen erzeugen wollte, wo, ohne zuerst 'reloadData' aufzurufen, nur die Löschungen animiert würden, aber die Einsätze nicht animiert würden. Sehr seltsames Problem war es. – Jeremy
Guter Weg ... + 1 für Sie Mann – Sabby