2009-10-22 3 views
0

Je crée une application basée sur UINavigationController. Et dans la première vue, j'ai un UITableViewController.UITableViewController cellule fadeout

Je veux avoir le même comportement que l'application Contacts. 1) l'utilisateur Sélectionner un contact 2) Contact show Détails du système 3) L'utilisateur sélectionne Qué bouton retour 4) Le système revient au tableview et fadeOut la cellule

je ne peux le faire si je crée un UIViewController et un xib avec un UITableView. Et puis ajoutez le code suivant:

- (void)viewDidAppear:(BOOL)animated{ 
    if ([self.mytableView indexPathForSelectedRow] != nil){ 
     [self.mytableView deselectRowAtIndexPath:[self.mytableView indexPathForSelectedRow] animated:YES]; 
    } 
} 

Je ne veux vraiment pas avoir un xib que pour cela. Alors est-il possible de le faire avec un UITableViewController?

Répondre

1

Oui. Un UITableViewController est une sous-classe de UIViewController de sorte que vous pouvez surpasser la méthode viewDidAppear:animated comme vous le souhaitez.

Si vous souhaitez créer le UITableViewControl par programme (c'est-à-dire sans le charger à partir d'une plume), vous devrez configurer manuellement le UITableView. Voir ce qui suit dans le UITableViewController class reference:

  • Si un fichier nib est spécifié via la méthode initWithNibName:bundle: (qui est déclarée par la superclasse UIViewController), UITableViewController charge l'affichage du tableau archivé dans le fichier nib. Dans le cas contraire, il crée un objet UITableView non configuré avec les dimensions correctes et le masque d'autoresize. Vous pouvez accéder à cette vue via la propriété tableView.
  • Si un fichier nib contenant la vue tabulaire est chargé, la source de données et le délégué deviennent les objets définis dans le fichier nib (le cas échéant). Si aucun fichier nib n'est spécifié ou si le fichier nib ne définit aucune source de données ou délégué, UITableViewController définit la source de données et le délégué de la vue de table sur self.
+0

Oui, je sais, mais quand je l'Override viewDidAppear: animé pour désélectionner la ligne, il ne fonctionnera pas, parce que le UITableViewController désélectionne déjà la ligne, mais ne montre pas la ligne à l'utilisateur. Désolé pour le mauvais anglais ... – Baltas

+0

Peut-être pourriez-vous essayer d'utiliser 'scrollToRowAtIndexPath: atScrollPosition: animé:' pour rendre la ligne sélectionnée visible avant de la désélectionner. Vous pouvez essayer de le faire soit au-dessus de l'appel de 'deselectRowAtIndexPath: animated:' dans 'viewDidAppear' ou peut-être plus tôt dans' viewWillAppear'. –

+0

Ok, j'ai trouvé le problème. Dans le viewWillAppear j'ai le [self.tableView reloadData] parce que je peux changer le contenu de mes données. Et si je teste le [self.tableView indexPathForSelectedRow] avant le reloadData, je reçois zéro, ce qui n'a pas fonctionné. Si je n'appelle pas la méthode reloadData, la cellule se déconnecte correctement, mais mes données peuvent ne pas être à jour, alors y a-t-il un autre moyen d'y parvenir? – Baltas

Questions connexes