【问题标题】:iPhone: viewWillAppear is not called for UIViewiPhone:不为 UIView 调用 viewWillAppear
【发布时间】:2011-04-14 16:12:12
【问题描述】:

我在我的 iPhone 应用程序中创建了一个 UIView。当 UIView 作为当前屏幕存在时,我想在用户关闭或打开时处理一些事情。我想,我可以在viewWillAppear: 下做到这一点。但是,viewWillAppear: 不会在 UIView 中调用。它仅适用于 UIViewController 吗?我如何为 UIView 处理 viewWillAppear:viewDidAppear:

更新: UIView 我通过程序创建的所有内容,而不是在 .xib 中。

请指教。

谢谢!

【问题讨论】:

  • 如何呈现和关闭 UIView?是按钮操作还是其他。视图的大小是多少。[顺便说一下,@James 回答的这些委托方法不会被调用]。
  • 按设备主页按钮关闭/启动。好的,如果不可能的话,谢谢。当用户按下主页按钮时,我至少可以在“applicationDidEnterBackground”中找到当前的 UIView 吗?

标签: iphone


【解决方案1】:

从您的消息中,我推断您在 UIView 类上编写了您的 viewWillAppear: 方法。正如您所怀疑的,该方法是[UIViewController]1 的一部分,而不是[UIView]2,因此它只会在UIViewController 上调用。

您应该将UIViewController 的属性视图连接到接口构建器中的UIView 对象,然后在UIViewController 中实现该方法。 如果您的视图是为响应用户操作而创建的,则

更新为您的更新: 您应该在代码 (view.tag=1) 或 IB 中标记视图。 然后您可以从您的委托中执行if (self.window.rootViewController.view.tag == 1) { ... }(假设您正在寻找作为根控制器的控制器的视图,否则发布更多详细信息)。 如果您在一个地方定义常量而不是将1 写为文字,那就更好了。

【讨论】:

    【解决方案2】:

    这些委托方法在超级视图每次呈现到屏幕时都会被调用,并且应该在 UIViewControllers 中实现。

    问题是当子视图出现在屏幕上时这些方法不会被调用,所以你的 superview-view-controller 必须相应地响应这些事件。

    您可以在this post here找到更多信息。

    【讨论】:

      【解决方案3】:

      如果你研究UIViewUIViewController的文档,你会发现-(void)viewWillAppear:animated:UIViewController的方法,而不是UIView的方法,所以要使用它,必须由子类化UIViewController。一般来说,如果你想遵循 MVC 的最佳实践,任何与视图本身无关的功能都应该委托给视图控制器,而不是在 UIView 子类的主体中。

      使用 xib 文件创建一个新的视图控制器,然后将自定义视图类链接到 xib 文件中的视图。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 2014-04-12
        • 2011-10-12
        • 2011-12-20
        • 2020-01-04
        相关资源
        最近更新 更多