J'ai une UITableView
dans une application iPhone que je rafraîchis (en appelant [self.tableView reloadData]
dans la méthode d'action pour un UISegmentedControl
intégré dynamiquement dans l'une des cellules UITableView. pour mettre à jour une valeur de texte pour l'une des cellulesUITableView rechargement de données/actualisation (problème de duplication possible)
Cependant, le code suivant semble produire un effet secondaire indésirable: chaque fois que l'UITableView se rafraîchit, il crée une nouvelle instance de UISegmentedControl (et éventuellement les images). - Je ne suis pas sûr (e)) par rapport au (x) existant (s)
La seule raison pour laquelle je remarque ceci est que chaque rafraîchissement est une mise à nu La frontière perceptible commence à se former autour du UISegmentedControl et l'application ralentit sensiblement. Je serais extrêmement reconnaissant pour toute suggestion/code-solutions à ma situation actuelle.
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
NSUInteger section = indexPath.section;
NSUInteger row = indexPath.row;
// Set up the cell...
//populates the personal info section
if (section == kPersonalInfoAddSection) {
if (row == kNameRow) {
//Other code irrelevant to this question was removed for the sake of clarity
}
else if(row == kHeightRow) {
cell.imageView.image = [UIImage imageNamed:@"tableview_height_label.png"];
//THIS IS THE TEXT I'M TRYING TO UPDATE
cell.textLabel.text = [Formatter formatHeightValue:mainUser.heightInMM forZone:self.heightZone];
cell.detailTextLabel.text = REQUIRED_STRING;
}
}
//populates the units section
if (section == kUnitsSection) {
if (row == kHeightUnitsRow) {
NSArray *heightUnitsSegments = [[NSArray alloc] initWithObjects:FT_AND_IN_STRING, M_AND_CM_STRING, nil];
UISegmentedControl *heightUnitControl = [[UISegmentedControl alloc] initWithItems:heightUnitsSegments];
CGRect segmentRect = CGRectMake(90, 7, 200, 30);
[heightUnitControl setFrame:segmentRect];
//[heightUnitControl setSelectedSegmentIndex:0];
[heightUnitControl addTarget:self action:@selector(heightSegmentClicked:) forControlEvents:UIControlEventValueChanged];
heightUnitControl.tag = kHeightSegmentedControlTag;
cell.textLabel.text = @"Height:";
cell.detailTextLabel.text = @"(units)";
[cell.contentView addSubview:heightUnitControl];
[heightUnitsSegments release];
[heightUnitControl release];
}
else if(row == kWeightUnitsRow) {
//Other code irrelevant to this question was removed for the sake of clarity
}
}
return cell;
}
Merci à tous à l'avance!
Encore mieux, créez une sous-classe UITableViewCell personnalisée et utilisez-la. Il n'y a aucune raison de vous limiter aux types de cellules par défaut si vous avez des besoins plus complexes. – TechZen
Merci pour les réponses. Je me demandais juste comment UITableViewCells personnalisé aiderait dans cette circonstance particulière (je suis relativement nouveau pour le développement de l'iPhone). En outre, il semble que l'utilisation de cellules personnalisées signifie que l'apparence arrondie des cellules dans une vue groupée disparaît (remplacée par des conrners carrés). – Urizen