2010-02-25 4 views
0

J'essaie de publier le texte de l'étiquette chaque fois que la personne clique sur un titre de livre à partir de la vue tableau, elle doit changer l'étiquette detailViewController (titleLabel) mais elle conserve le même titre.Sortie iPhone Texte de l'étiquette

Vous vous demandez si je l'ai fait quelque chose de mal - eh bien je sais que je dois mais se demander comment je résoudre ce problème ...

// 
// BookDetailViewController.m 

#import "BookDetailViewController.h" 
#import "Book.h" 

@implementation BookDetailViewController 

@synthesize aBook, titleLabel; 

// Implement viewDidLoad to do additional setup after loading the view. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self bookDes]; 
    self.title = @"Book Detail"; 
} 

-(void)bookDes { 
    [self.titleLabel setText:nil]; 

    [self.titleLabel setText:aBook.title]; 
} 

- (void)dealloc { 
    [aBook release]; 
    [titleLabel release]; 
    [super dealloc]; 
} 
@end 
+0

Pouvez-vous poster le code qui crée le contrôleur - Je pense que vous pourriez appelez bookDes l'intérieur viewDidLoad avant d'avoir mis en aBook être le livre que vous voulez? – deanWombourne

+0

Quand définissez-vous votre objet aBook? –

+0

Le code provient de http://www.iphonesdkarticles.com/2008/11/parsing-xml-files.html Cependant, je viens de changer le detailView comme je ne veux pas le montrer dans un TableView – RussellHarrower

Répondre

0

Vous appelez [auto] bookDes de viewDidLoad ... Cette méthode est appelée après un contrôleur de vue a chargé ses vues associées dans la mémoire. Comment créez-vous le BookDetailViewController? Si vous ne le créez qu'une seule fois et que vous réutilisez le contrôleur à chaque fois qu'un utilisateur appuie sur un titre de livre, la méthode viewDidLoad ne sera appelée qu'une seule fois.

Si vous avez déjà le titre du livre dans votre contrôleur parent, pourquoi ne pas simplement définir la propriété à partir de là lorsque vous poussez l'enfant sur le contrôleur de navigation?

bookDetailsController.titleLabel.text = selectedBook.title; 

EDIT DE COMMENTAIRE:

Oui, le BookDetailsViewController est créé une fois, puis sauvé ... de sorte que le viewDidLoad est appelée une seule fois.

Une chose que vous pouvez essayer est mise l'étiquette dans la méthode didSelectRowAtIndexPath des parents:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // Navigation logic -- create and push a new view controller 

    if(bdvController == nil) 
     bdvController = [[BookDetailViewController alloc] initWithNibName:@"BookDetailView" bundle:[NSBundle mainBundle]]; 

    Book *aBook = [appDelegate.books objectAtIndex:indexPath.row]; 

    bdvController.aBook = aBook; 
    bdvController.titleLabel.text = aBook.title; 


    [self.navigationController pushViewController:bdvController animated:YES]; 
} 

il y a de meilleures façons de le faire comme remplaçant le dispositif de réglage sur le contrôleur de détails et réglage de l'étiquette ... mais vous devrait rester simple et le faire fonctionner en premier.

Hope this helps

+0

Je suis en utilisant un exemple de code, de www.iPhoneSDKArticles.com. appelé BookDetailViewController Cependant, mon problème est que je ne veux pas afficher les livres dans une vue de table après que l'utilisateur a cliqué sur le titre pour plus d'informations. J'ai regardé ce code pour trouver ce que vous avez dit ci-dessus mais je ne le trouve pas. - http://www.iphonesdkarticles.com/2008/11/parsing-xml-files.html – RussellHarrower

+0

Tout ce que je peux dire c'est votre KING! Cela a fonctionné – RussellHarrower