1 votes

Comment mettre en évidence une UITableViewCell ?

J'aimerais beaucoup mettre temporairement en évidence une UITableViewCell pour attirer l'attention sur le fait que les données qu'elle contient ont changé.

il existe une méthode UITableViewCell : -setHighlighted :(BOOL) animated :(BOOL) mais je n'arrive pas à lui faire faire quoi que ce soit ?

Voici la partie pertinente du contrôleur de vue :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  UITableViewCell *cell;
  switch (indexPath.section) {
    case 0: {
     if (indexPath.row == 0) {
    cell = [[UITableViewCell alloc ] initWithStyle:UITableViewCellStyleDefault 
                                   reuseIdentifier:@"currentLoc"];
    cell.accessoryType = UITableViewCellAccessoryNone;
      cell.textLabel.text = @"This is the special cell";
    }
    [cell setHighlighted:YES animated:YES];
    [cell setHighlighted:NO animated:YES];

    //[cell setNeedsDisplay];

  } else {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                   reuseIdentifier:@"setLocAutomatically"];
    cell.accessoryType = UITableViewCellAccessoryNone;
    cell.textLabel.text = @"Foo";

  }
} break;
case 1: {
  cell = [[UITableViewCell alloc ] initWithStyle:UITableViewCellStyleDefault
                                 reuseIdentifier:@"selectCity"];
  cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
  if (indexPath.row == 0) {
    cell.textLabel.text = @"Select a Bar";
  } else {
    cell.textLabel.text = @"Select a Baz";
  }
} break;
  }
  [cell autorelease];
  return cell;
}

Voir la [cell setHighlight...] ci-dessus pour ma tentative.

À ma grande frustration, la cellule ne se met pas en évidence et je n'ai pas trouvé le moyen de la faire fonctionner.

Merci,

Carl C-M

15voto

Eddie Points 151

Il suffit de mettre le code de mise en évidence / de changement d'arrière-plan / autre :

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

4voto

Tim Points 33042

Parce que vous faites tout ça dans tableView:cellForRowAtIndexPath: rien ne se passe dans la cellule à l'écran jusqu'à ce que après vous rendez la cellule. Par conséquent, le fait de mettre la cellule en surbrillance n'apporte rien de visible à l'utilisateur.

Ce que vous voulez faire, c'est trouver un moyen de mettre la cellule en surbrillance après l'avoir retournée depuis la méthode. Vous pouvez peut-être chercher dans L'objet de NSObject performSelector:withObject:afterDelay: pourrait vous être utile - vous pourriez définir la cellule comme étant en surbrillance avec un délai, afin qu'elle soit renvoyée et affichée, puis souligné.

0voto

Paulo Points 1545

Avez-vous pensé à modifier l'UILabel de la cellule et à changer simplement l'apparence plutôt que d'essayer de modifier la cellule elle-même ? Peut-être une couleur de texte différente ou du gras ?

Cela vous permettrait de garder les changements dans tableView:cellForRowAtIndexPath:

Cela permet également de s'assurer que l'apparence par défaut de la mise en évidence n'est pas mélangée avec votre message supplémentaire de modification des informations. La mise en surbrillance peut signifier beaucoup de choses, mais le formatage du texte peut être utilisé pour indiquer votre concept spécifique.

UILabel * textLabel = [yourCell textLabel];
// From here you can alter the text

http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UILabel_Class/Reference/UILabel.html

0voto

Nareshkumar Points 1104

Essayez d'utiliser le [tblView selectRowAtIndexPath:myIndex animated:YES scrollPosition:UITableViewScrollPositionTop]; fonction.

0voto

Gregory Hill Points 92

J'ai une variation sur ce sujet qui continue à me laisser perplexe. J'ai un assistant qui utilise des tableaux pour indiquer les sélections possibles. Lorsqu'une sélection est effectuée, j'aimerais mettre temporairement en surbrillance la ligne sélectionnée, puis passer au cadre suivant de l'assistant.

Je fais l'avancement dans

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

Mais je ne peux pas faire en sorte que le temps fort se produise.

Des suggestions ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X