【问题标题】:ViewDidAppear/ViewWillAppear not being called未调用 ViewDidAppear/ViewWillAppear
【发布时间】:2010-10-17 20:02:40
【问题描述】:

我有一个 ViewController 可以添加到其他具有子类 uiviewControllers 的子视图中

所以它是这样的:

mainViewController
       |
  v---------v
subVC1   subVC2

subVC1 或 subVC2 都没有对它们触发 viewDidAppear/viewWillAppear 吗? 主视图控制器正在应用程序委托中创建,并且它的视图也添加到了窗口中。

这是一个显示我的问题的 xcode 项目:http://www.qfpost.com/download.do?get=92f03538907e72665ea794d98ff8392b

【问题讨论】:

    标签: iphone objective-c ipad viewwillappear


    【解决方案1】:

    我查看了您的代码。 所以问题是 viewWillAppear/viewDidAppear 在视图添加到窗口时被调用,而不是它的子视图之一。 您可能希望为此使用 viewDidLoad。

    【讨论】:

    • 真的,我以前从来没有这样做过吗?
    • 在您的示例中,您将 subVC2 的视图添加到 mainViewController 的视图中。这不会调用 viewDidAppear,因为当您将它添加到应用程序的“窗口”对象时会调用此方法。您在示例中犯的另外两个错误:您使用“init”方法初始化 subVC2。我认为您想使用您在笔尖中构建的那个。您需要使用 initWithNibName:bundle: 方法。最后一件事,您可能希望在添加子视图时释放 subVC2,因为您没有保留对它的任何引用。
    • 哦,我不是说要使用笔尖,但我不应该释放 subVC2,因为我只将 subvc2 的视图传递给 addsubview 方法而不是整个视图控制器? iPhone 上的 VW/DA 是否也是这样,因为我发誓这在我之前从未发生过。
    • 一行答案是 - 在窗口下直接添加 navigationController.view 否则视图将不会被调用!谢谢。很好的帮助
    • 谢谢哥们。我有一个奇怪的实现。当视图出现时,只有 viewdidload 被调用。
    【解决方案2】:

    首先,你确定你真的需要用这个 UIViewControllers 层次结构做你正在做的事情吗?为什么你的 MainViewController 不能处理你的 subVC1subVC2 负责的视图?

    其次,当您编写代码从 MainViewController 调用它们时,您的 viewWillAppear/viewDidAppear 将被调用。在不了解您的设计的任何其他信息的情况下,实际上不可能建议您何时应该调用它们,但如果在“主”视图可见时子控制器的视图始终可见,那么调用它们可能是有意义的来自mainViewController 的 viewWillAppear/viewDidAppear 方法。

    【讨论】:

      猜你喜欢
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 2014-03-21
      相关资源
      最近更新 更多