【问题标题】:How to reload a uiviewcontroller on the iPhone如何在 iPhone 上重新加载 uiviewcontroller
【发布时间】:2009-07-18 23:38:19
【问题描述】:

我正在尝试重新加载我在 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];

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

【问题讨论】:

    标签: iphone objective-c uiviewcontroller


    【解决方案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访问后才被加载。这在documentation for UIViewController中有解释:

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

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

    【讨论】:

    • insertView:atIndex: 不加载视图,它将已经实例化的视图添加到视图层次结构中。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-09-05
      • 2012-07-18
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      相关资源
      最近更新 更多