2010-12-25 2 views
0

J'ai créé une application qui permet aux utilisateurs d'ajouter des informations (à partir d'un addViewController), qui est ensuite affichée dans un UITableView sur le rootViewController. Lorsque l'utilisateur appuie sur tableViewCell le detailViewController affiche alors, vous l'avez deviné, plus de détails concernant les informations utilisateur entrées. Ce que j'essaie d'accomplir est de configurer un editViewController qui permettra aux utilisateurs de modifier les informations qu'ils ont déjà soumises.Mise à jour par défaut detailViewController

Actuellement, j'essaie d'auto-remplir le editViewController avec les informations précédemment soumises par l'utilisateur (après quoi il peut appuyer sur enregistrer et mettre à jour les informations). Cependant, je suis coincé en essayant d'effectuer cette auto-remplissage et je ne suis pas sûr que ce soit la meilleure voie pour y parvenir.

Voici la méthode d'édition appelée pour charger le editViewController à partir de detailViewController. Ici, j'essaye de charger les informations d'un tableau enregistré qui est déclaré dans mon rootViewController.

Des pensées n'importe quel corps?

Répondre

0

Définissez des propriétés dans votre vue d'édition avec retain, puis modifiez simplement la valeur. Retenez simplement vous donner et référence à l'objet original. Le setText sur le champ de texte fait juste une nouvelle copie de votre chaîne. Si vous souhaitez effectuer cette approche, vous pouvez créer un protocole de délégué dans votre vue Modifier et définir le contrôleur de navigation actuel qui présente votre vue d'édition comme étant le délégué de votre vue d'édition. Et dans votre vue d'édition quand il disparaîtra, appelez la méthode déléguée.

délégué doc here

propriété Déclaré doc here

Bonne chance.

0

bien ...

NSInteger styleRows = [rvc.scoreTypeArray objectAtIndex:indexPath.row]; 

Ceci est faux parce que, vous essayez d'accéder à indexPath.row qui n'est pas défini dans cette méthode. IndexPath.row est généralement utilisé dans les méthodes de tableView comme

(tableView*)didSelectRowAt:(NSIndexPath*)indexPath 

Vous devrez passer la valeur de indexPath.row des delegatemethods du tableView en tant que paramètre dans la méthode editDetails.

mais vous ne fait besoin de ce ... au lieu faire:

dans detailViewController et editViewController, créez un NSString *dateObject et faire de @property(nonatomic,assign). maintenant dans votre de viewcontroller racine didSelectRowAtIndexPath, lorsque l'utilisateur tape la ligne,

[dvc setDateObject:self.dateArray objectAtindex:indexPath.row]; 

maintenant, le detailViewController contient une référence à la date d'origine dans l'objet dateObject. toute modification que vous apportez ici changera également la date dans le tableau de date de rootViewController.

Ainsi, lorsque l'utilisation tape sur le bouton d'édition, appelez le

-(IBAction)editDetails:(id)sender { 

    editViewController *evc = [[editViewController alloc] initWithNibName:@"editViewController" bundle:nil]; 

    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:evc]; 
    [evc setDateObject:self.dateObject]; 
    [[self navigationController] presentModalViewController:navigationController animated:YES]; 

    [navigationController release]; 
    [evc release]; 

} 

Maintenant, vous avez à nouveau passé sur le dateObject original au editViewController. dans viewDidLoad, définissez textField, et lorsque l'utilisateur édite et hits fait, remplacez le dateObject dans editViewController avec l'objet date modifié. Souvenez-vous, il s'agit de l'objet dateObject d'origine qui a été transmis en tant que référence par rootViewController. donc vous l'avez remplacé là aussi dans dateArray de rootViewController. maintenant vous avez juste besoin de savoir quand vous revenez de detailViewController à rootViewController et de faire une [table reloadData];

tadan !!!

+0

Lorsque je compile, j'obtiens cet avertissement. Les choses courent mais rien ne passe de la vue à la vue et il finit par s'écraser. Attention: 'detailViewController' ne répond pas à '-setDataObject: objectAtindex:' (Les messages sans signature de méthode correspondante seront supposés retourner 'id' et accepter '...' comme arguments). – DrBeak1

+0

Je n'ai juste pas de chance avec ça. Je ne peux pas comprendre comment ajouter et remplacer l'objet tableau d'origine à partir d'une chaîne qui n'est pas déclarée dans la même classe. Je peux mettre les chaînes à jour (d'après ce que j'ai compris, chaque classe a sa propre chaîne) mais cela n'affecte en rien les objets du tableau. Pouvez-vous ou quelqu'un d'expliquer plus comment cela fonctionne ?? Merci:) – DrBeak1

+0

Ok, est-ce que vous définissez une variable appelée dateObject dans le fichier d'en-tête? et sa propriété associée? vous devriez définir la propriété comme @property (nonatomic, assign) xxx dateObject; et avez aussi un @synthesize dateObject dans votre fichier .m –

Questions connexes