Question

J'ai un NavController et tableViewController mis en place de telle sorte que la sélection d'une ligne de table va pousser une vue détaillée sur la pile du NavController et afficher des informations détaillées sur la ligne sélectionnée. Dans la vue détaillée que j'utilise un seul UILabel pour afficher l'info, et je mets la valeur de la propriété de texte étiquette viewDidLoad du contrôleur de vue détaillée.

La première fois que je sélectionne une ligne, la vue détaillée vient avec le texte attendu. Quand je vais revenir à la vue de la table et sélectionnez une autre ligne, la vue détaillée arrive avec le même texte que la première fois.

J'ai vu quelques exemples de code où le contrôleur de vue détaillée est libéré puis fixé à zéro après avoir été poussé sur la pile du NavController. Si j'ajoute que mon code, le problème disparaît, mais je ne comprends pas pourquoi.

Quelqu'un peut-il me expliquer ce qui se passe ici?

Merci!

Était-ce utile?

La solution

-viewDidLoad est appelée que lorsque le ... eh bien, lorsque la vue est chargé. C'est-à-dire quand il est créé en mémoire, ce qui est la première fois que vous créez le contrôleur de vue. Toutes les personnalisations des données d'entrée en fonction doivent être effectués à la place dans -viewWillAppear:, qui est appelé à chaque fois avant de le pousser sur le contrôleur de navigation.

Bien que, dans la pratique générale, je libère toujours un nouveau contrôleur de vue juste après avoir appuyé sur la pile, car il ne me appartient pas plus, il appartient au contrôleur de navigation. Dans ce cas, la prochaine fois que vous appuyez sur la pile, il va charger à nouveau la vue, car il est un nouvel objet.

- (void) tableView:(TableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController *screen = [[MyNewViewController alloc] initWithData:[data objectAtIndex:indexPath.row]];
    [self.navigationController pushViewController:screen animated:YES];
    [screen release];
}

L'idée principale, cependant, est que la personnalisation d'une vue basée sur des données qui peuvent changer chaque fois que vous voyez la vue doit se faire dans -viewWillAppear:. Personnalisation d'un point de vue plus loin que vous pouvez dans Interface Builder, changer les choses qui ne changeront pas, peu importe ce que les données que vous regardez, devrait être fait dans -viewDidLoad

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top