如何在iPhone上重新加载uiviewcontroller

时间:2009-07-18 23:38:20

标签: iphone objective-c uiviewcontroller

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

    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];

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

2 个答案:

答案 0 :(得分:1)

只有在加载了UIView表示的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在第一次通过come.view访问之前未加载。这在documentation for UIViewController

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

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

答案 1 :(得分:0)

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

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

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