Je suis en train de créer un accordéon type de uitableviewcell que, lorsque l'utilisateur sélectionne la cellule, il se développe pour afficher une info détaillée de vue inline similaire à la façon dont les digg application fonctionne. J'ai d'abord essayé de remplacer l'actuel tablecell avec un customcell dans cellForRowAtIndex cependant, l'animation est un peu agitée comme vous pouvez le voir la cellule remplacé, et dans l'ensemble, l'effet ne fonctionne pas bien.
Si vous regardez les digg app et d'autres qui ont fait cela, il semble qu'ils n'en remplacement de l'actuelle cellule, mais plutôt peut-être l'ajout d'un sous-vue à la cellule? La cellule d'origine cependant ne semble pas animer à tous et seule la nouvelle vue des accordéons dans la table.
Quelqu'un a une idée comment faire pour obtenir un effet similaire?
Mise à jour: J'ai fait des progrès à l'aide de neha la méthode ci-dessous, et alors que la cellule est l'animation de la bonne manière, il fait des ravages avec les autres cellules du tableau. Ce que j'ai fait est sous-classé UITableViewCell avec une classe personnalisée qui contient une instance d'une UIView qui, de fait, attire le regard que je puis ajouter à la table de cellules contentview.
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
if (selected) {
[self expandCell];
}
}
-(void)expandCell {
self.contentView.frame = CGRectMake(0.0, 0.0, self.contentView.bounds.size.width, 110);
}
Voici le tableau délégué méthodes, je suis en utilisant:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (isSearching && indexPath.row == selectedIndex) {
static NSString *CellIdentifier = @"SearchCell";
CustomTableCell *cell = (CustomTableCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[CustomTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
[cell setCustomTitle:[timeZoneNames objectAtIndex:indexPath.row] detail:[timeZoneNames objectAtIndex:indexPath.row]];
UILabel *theText = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 10.0, cell.contentView.bounds.size.width -20, 22.0)];
theText.text = @"Title Text";
[cell.contentView addSubview:theText];
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10.0, 10 + 46.0, cell.contentView.bounds.size.width - 20, 40.0)];
textField.borderStyle = UITextBorderStyleLine;
[cell.contentView addSubview:textField];
UILabel *testLabel = [[UILabel alloc] initWithFrame:CGRectMake(5.0, 88.0, cell.contentView.bounds.size.width - 20, 22.0)];
testLabel.text = [NSString stringWithFormat:@"Some text here"];
[cell.contentView addSubview:testLabel];
[theText release];
[textField release];
[testLabel release];
return cell;
} else {
static NSString *CellIdentifier = @"Cell";
CustomTableCell *cell = (CustomTableCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[CustomTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
[cell setCustomTitle:[timeZoneNames objectAtIndex:indexPath.row] detail:[timeZoneNames objectAtIndex:indexPath.row]];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:NO];
selectedIndex = indexPath.row;
isSearching = YES;
[tableView beginUpdates];
[tableView endUpdates];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (isSearching && indexPath.row == selectedIndex) {
return 110;
}
return rowHeight;
}
Il semble maintenant que la cellule est en expansion, mais pas réellement être actualisée afin de les étiquettes, et textfield arent. Ils ne montrent cependant quand je fais défiler la cellule et sur l'écran.
Des idées?