切换到详细视图时,无法多次更改UILabel.text

时间:2009-08-07 14:27:38

标签: iphone uinavigationcontroller uitableview

我有一个navController和tableViewController设置,选择一个表行将推送navController堆栈上的详细信息视图,并显示有关所选行的详细信息。在详细视图中,我使用单个UILabel来显示信息,并在详细视图控制器的viewDidLoad中设置标签文本属性的值。

第一次选择行时,详细视图会显示预期的文本。当我返回到表格视图并选择不同的行时,详细视图会显示与第一次相同的文本。

我已经看到一些代码示例,其中详细视图控制器被释放,然后在navController的堆栈上被推送后设置为nil。如果我将其添加到我的代码中,问题就会消失,但我不明白为什么。

有人可以向我解释这里发生了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

-viewDidLoad仅在...加载视图时调用。也就是说,当它在内存中创建时,这是您第一次创建视图控制器。任何基于自定义的输入数据都应该在-viewWillAppear:中完成,每次在将其推送到导航控制器之前都会调用它。

虽然在一般情况下,我总是在将它推入堆栈后立即释放一个新的视图控制器,因为它不再属于我,它属于导航控制器。在这种情况下,下次将其推入堆栈时,它将再次加载视图,因为它是一个新对象。

- (void) tableView:(TableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIViewController *screen = [[MyNewViewController alloc] initWithData:[data objectAtIndex:indexPath.row]];
    [self.navigationController pushViewController:screen animated:YES];
    [screen release];
}

但主要的想法是,根据每次看到视图时可能会更改的数据自定义视图应该在-viewWillAppear:内完成。在Interface Builder中进一步自定义视图,无论您正在查看哪些数据,都要更改不会更改的内容,应在-viewDidLoad

中完成