Текст релиза iPhone - PullRequest
       8

Текст релиза iPhone

0 голосов
/ 25 февраля 2010

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

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

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

1 Ответ

0 голосов
/ 25 февраля 2010

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

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

bookDetailsController.titleLabel.text = selectedBook.title;

ИЗМЕНИТЬ ИЗ КОММЕНТАРИИ:

Да, 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];
}

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

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...