iPhone发布标签文字

时间:2010-02-25 15:13:43

标签: iphone uilabel

我试图在每次从表格视图中点击书名时发布标签文本,它应该更改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 :(得分:0)

您正在从viewDidLoad调用[self bookDes] ...在视图控制器将其关联的视图加载到内存后调用此方法。你是如何创建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];
}

有更好的方法可以做到这一点,比如覆盖细节控制器上的setter并设置标签......但是你应该保持简单,让它先工作。

希望这有帮助