2010-02-25 3 views
0

Я пытаюсь выпустить текст метки каждый раз, когда человек нажимает на название книги из представления таблицы, он должен изменить метку detailViewController (titleLabel), однако он продолжает показывать тот же заголовок книги.iPhone release Текст ярлыка

Удивление Если я сделал что-то неправильно - я хорошо знаю, что есть, но интересно, как я могу это исправить ...

// 
// 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

Вы можете разместить код, который создает контроллер - Я думаю, что вы могли бы называть bookDes внутри viewdidLoad, прежде чем вы установили aBook быть книгой, которую вы хотите? – deanWombourne

+0

Когда вы устанавливаете свой объект aBook? –

+0

Код с http://www.iphonesdkarticles.com/2008/11/parsing-xml-files.html Однако я только что изменил detailView, поскольку я не хочу показывать его в TableView – RussellHarrower

ответ

0

Вы вызываете [самостоятельно] bookDes из viewDidLoad ... Этот метод вызывается после того, как контроллер представления загрузил связанные с ним виды в память. Как вы создаете BookDetailViewController? Если вы создадите его только один раз и затем повторно используете контроллер каждый раз, когда пользователь нажимает название книги, метод viewDidLoad также будет вызываться только один раз.

Если у вас уже есть название книги в вашем родительском контроллере, почему бы вам просто не установить свойство там, когда вы нажимаете ребенка на контроллер навигации?

bookDetailsController.titleLabel.text = selectedBook.title; 

EDIT ОТ КОММЕНТАРИЕВ:

Да, BookDetailsViewController создается один раз, а затем сохранен ... так viewDidLoad вызывается только один раз.

Одна вещь, которую вы могли бы попробовать это установка метки в методе didSelectRowAtIndexPath родителя:

- (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]; 
} 

есть лучшие способы сделать это, как переопределение сеттер на контроллере деталей и установка метки ... но вы должен держать его простым и заставить его работать в первую очередь.

Надеется, что это помогает

+0

Я используя пример кода, от www.iPhoneSDKArticles.com. так называемый BookDetailViewController Однако моя проблема заключается в том, что я не хочу показывать книги в виде таблицы после того, как пользователь нажимает на заголовок для получения дополнительной информации. Я просмотрел этот код, чтобы найти то, что вы сказали выше, но не можете его найти. - http://www.iphonesdkarticles.com/2008/11/parsing-xml-files.html – RussellHarrower

+0

ВСЕ Я могу сказать, что это ваш КОРОЛЬ! Это сработало – RussellHarrower

Смежные вопросы