2009-03-30 9 views
0

J'ai une vue de table qui montre une liste de transactions bancaires. Quand j'en tape un, j'aimerais montrer la boîte de dialogue d'édition, initialisée avec les données actuelles. Je fais quelque chose comme ça actuellement pour obtenir le contrôleur et pour initialiser les champs de texte sur son point de vue:Comment initialiser une vue lors de l'utilisation du contrôleur de navigation

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    TransactionDetailViewController *transactionDetailViewController; 
    transactionDetailViewController = [[TransactionDetailViewController alloc] initWithNibName:@"TransactionDetailViewController" bundle:nil]; 

    // round up data 
    NSMutableDictionary *rowDict = (NSMutableDictionary *)[transactions objectAtIndex:indexPath.row]; 

    transactionDetailViewController.amountField.text = [rowDict objectForKey:@"amount"]; 
    transactionDetailViewController.nameField.text = [rowDict objectForKey:@"name"]; 
    transactionDetailViewController.datePicker.date = [rowDict objectForKey:@"date"]; 

    [self.navigationController pushViewController:transactionDetailViewController animated:YES]; 
    [transactionDetailViewController release]; 
} 

Malheureusement, cela ne fonctionne pas, parce que le amountField, nameField et Datepicker n'a pas été initialisé à ce stade - ils sont 0x00, et par conséquent, se passer lorsque je tente de définir leurs valeurs de texte ou de date. Ils sont correctement initialisés au moment où viewDidLoad est appelé. Dois-je stocker la ligne sélectionnée dans le contrôleur parent, puis rappeler le propriétaire du fichier à partir de la vue détaillée ou est-il possible d'initialiser la vue détaillée en même temps et de la placer?

Répondre

2

Vous avez 2 options:

  1. substituez la méthode init dans TransactionDetailViewController et initialiser les sous-vues il

  2. passer le NSDictionary-TransactionDetailViewController et faites votre initialisation dans viewDidLoad.

Je combine généralement les deux méthodes.

Si votre vue n'est pas compliquée (et que vous n'avez pas vraiment besoin d'utiliser un fichier NIB), vous pouvez construire votre vue en init. D'autre part, en passant le NSDictionary à la vue, il est plus facile d'obtenir les valeurs de retour.

Ainsi, dans votre cas, je serais probablement ajouter une propriété NSDictionary-TransactionDetailViewController et faire

[transactionDetailViewController setTransaction:rowDict] 

Puis, en viewDidLoad, je serais initialiser les valeurs dans les sous-vues.

+0

Bonne affaire! Je plongeais moi-même pendant un moment, et je me suis rendu compte de l'option # 2, qui semblait être une bonne façon de le faire. Merci pour la direction! –

+0

De rien. =) –

Questions connexes