如何在iPhone上重新加载uiviewcontroller

如何在iPhone上重新加载uiviewcontroller,iphone,objective-c,uiviewcontroller,Iphone,Objective C,Uiviewcontroller,我正在尝试重新加载我在UIViewController上设置的值,以便在每次使用此代码进行转换时进行更新(来和去都是UIViewController): 当电话号码值在即将到来的视图中更改时,当视图插入子视图时,它将永远不会显示。如何使视图显示更新的电话号码?我假设电话号码是一个NSString。你必须记住在屏幕上显示的东西和支持它的物体之间是有区别的。显示特定值的UITextField与从中获取该值的NSString不同,当您更改NSString时,如果希望显示UITextField,则需要更

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


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

我假设电话号码是一个NSString。你必须记住在屏幕上显示的东西和支持它的物体之间是有区别的。显示特定值的UITextField与从中获取该值的NSString不同,当您更改NSString时,如果希望显示UITextField,则需要更改其值

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


看起来您正在尝试实现UINavigationController或uitabarcontroller。如果可能的话,您应该只使用其中一个,而不是自己尝试处理所有的转换。它们负责附加和分离视图、调用视图(Did/Will)(显示/消失)等。

只有在加载UIViewController所代表的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];
[即将出现的视图:是];
[即将消失:是];
[going.view removeFromSuperview];
[self.window insertSubview:coming.view-atIndex:0];
coming.phoneNumber=aPhoneNumber
[消失:是];
[未来视图显示:是]
在上面的代码中,即将到来的UIViewController已经加载,但它所代表的UIView在coming.view首次访问之前不会加载。下文对此进行了解释:

如果访问[view]属性且其值当前为零,则视图控制器将自动调用loadView方法并返回结果视图。
您可以通过UIViewController的-isViewLoaded方法确定是否已加载UIView。

insertView:atIndex:不加载视图,它会将已实例化的视图添加到视图层次结构中。
[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];