J'ai personnalisé UITableViewCell
s où j'ai placé des boutons dynamiquement dans le code. J'ai programmé des actions pour de tels boutons, et quand l'action est déclenchée, alors j'ai besoin de recharger la table, entre autres choses. Une fois que le rechargement est appelé, le bouton de l'expéditeur disparaît, et je ne sais pas pourquoi ... Quelqu'un pourrait-il me donner un indice pour la raison possible? Si le bouton n'est pas appuyé, et que je fais défiler la table de haut en bas, elle reste là.Perdant UIButton dans une cellule personnalisée lors du rechargement de la table
Merci!
EDIT
Ceci est un extrait de code de cellForRowAtIndexPath
:
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSArray *listData =[self.tableViewEntries objectForKey:[self.sortedKeys objectAtIndex:[indexPath section]]];
UITableViewCell *cell;
if (indexPath.section == 0) {
switch (indexPath.row) {
case 0: {
cell = [self.tableView dequeueReusableCellWithIdentifier:@"firstCell"];
((CustomCell *)cell).cellTextField.tag = firstCellTag;
cell.tag = firstCellTag;
break;
}
case 1: {
cell = [self.tableView dequeueReusableCellWithIdentifier:@"secondCell"];
((CustomCell *)cell).cellTextField.tag = secondCellTag;
cell.tag = secondCellTag;
break;
}
}
return cell;
}
Le CustomCell
que j'ai défini est chargé d'un nib
. Ces cellules ont un UITextField
pour l'entrée de l'utilisateur et un UIView
où je règle ou supprime dynamiquement les boutons dans le code en fonction de l'entrée de l'utilisateur dans le champ de texte. Les boutons sont créés dans le code, et leurs actions sont définies dans le code ainsi:
- (void)setButtonForCell:(UITableViewCell *)cell withResult:(BOOL)isValid
{
UIImage* validationButtonNormalImage = nil;
UIImage* validationButtonHighlightImage = nil;
UIButton *validationButton = [UIButton buttonWithType:UIButtonTypeCustom];
[validationButton setFrame:CGRectMake(0, 0, ((CustomCell *)cell).cellValidationView.frame.size.width, ((CustomCell *)cell).cellValidationView.frame.size.height)];
if (isValid) {
validationButtonNormalImage =[[UIImage imageNamed:@"success.png"] stretchableImageWithLeftCapWidth:5.0 topCapHeight:0.0];
validationButtonHighlightImage =[[UIImage imageNamed:@"success.png"] stretchableImageWithLeftCapWidth:5.0 topCapHeight:0.0];
[validationButton removeTarget:self
action:@selector(validationButtonTapped:)
forControlEvents:UIControlEventTouchUpInside];
}
else {
validationButtonNormalImage =[[UIImage imageNamed:@"error.png"] stretchableImageWithLeftCapWidth:5.0 topCapHeight:0.0];
validationButtonHighlightImage =[[UIImage imageNamed:@"error.png"] stretchableImageWithLeftCapWidth:5.0 topCapHeight:0.0];
[validationButton setTag:cell.tag];
[validationButton removeTarget:self
action:@selector(validationButtonTapped:)
forControlEvents:UIControlEventTouchUpInside];
[validationButton addTarget:self
action:@selector(validationButtonTapped:)
forControlEvents:UIControlEventTouchUpInside];
}
[validationButton setBackgroundImage:validationButtonNormalImage forState:UIControlStateNormal];
[validationButton setBackgroundImage:validationButtonHighlightImage forState:UIControlStateHighlighted];
[((CustomCell *)cell).cellValidationView.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];
[((CustomCell *)cell).cellValidationView addSubview:validationButton];
}
Puis, en validationButtonTapped:
, je fais des tâches et appelle à [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:NO];
, et il y a quand je lâche le bouton de la vue. Cependant, si je n'appuie pas sur le bouton et que je défile vers le bas et vers le haut pour que le bouton 'cellForRowAtIndexPath:' soit à nouveau appelé, le bouton reste ici. C'est comme si je perdais seulement quand j'appelais pour un rechargement.
Une aide?
pouvez-vous s'il vous plaît poster votre code ...? –