0

我正在尝试重新加载我在 UIViewController 上设置的值,以便在每次使用此代码转换时进行更新(来来往往都是 UIViewController):

    coming.phoneNumber = aPhoneNumber;
    [coming viewWillAppear:YES];
[going viewWillDisappear:YES];
[going.view removeFromSuperview];
[self.window insertSubview: coming.view atIndex:0];
[going viewDidDisappear:YES];
[coming viewDidAppear:YES];

当电话号码值在即将到来的视图中更改时,当视图插入子视图时它永远不会显示。如何让视图显示更新的电话号码?

4

2 回答 2

1

只有在加载了它所代表的 UIView 之后,您才应该通过修改 UIViewController 的属性来获得所需的行为:

[coming viewWillAppear:YES];
[going viewWillDisappear:YES];
[going.view removeFromSuperview];
[self.window insertSubview:coming.view atIndex:0];
coming.phoneNumber = aPhoneNumber;
[going viewDidDisappear:YES];
[coming viewDidAppear:YES];

在上面的代码中,即将到来的UIViewController已经加载完毕,但是它所代表的UIView直到第一次被coming.view访问后才被加载。这在UIViewController 的文档中有解释:

如果您访问 [the view] 属性并且其值当前为 nil,则视图控制器会自动调用 loadView 方法并返回结果视图。

您可以通过 UIViewController 的 -isViewLoaded 方法确定是否已加载 UIView。

于 2009-07-19T00:06:35.470 回答
0

我假设 phoneNumber 是一个 NSString。您必须记住,屏幕上显示的内容与支持它的对象之间存在区别。显示特定值的 UITextField 与从中获取该值的 NSString 不同,当您更改 NSString 时,如果您希望显示它,则需要更改 UITextField 的值。

除非您有 setPhoneNumber: 的自定义实现:即将到来或正在使用 KVO 来观察值,否则使用 phoneNumber 显示的视图无法知道更新屏幕上的内容。

看起来您正在尝试实现 UINavigationController 或 UITabBarController。如果可能的话,您应该只使用其中一个,而不是尝试自己处理所有过渡。他们负责附加和分离视图,调用视图(Did/Will)(Appeaer/Disappear)等。

于 2009-07-18T23:55:07.350 回答