我正在尝试重新加载我在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];
当电话号码值在即将到来的视图中发生变化时,当视图插入子视图时,它永远不会显示。如何让视图显示更新的电话号码?
答案 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)等。