我试图在每次从表格视图中点击书名时发布标签文本,它应该更改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
答案 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并设置标签......但是你应该保持简单,让它先工作。
希望这有帮助