iPhone:不为UIView调用viewWillAppear

时间:2011-04-14 16:12:13

标签: iphone

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

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

请告知。

谢谢!

3 个答案:

答案 0 :(得分:5)

根据您的消息,我推断您在viewWillAppear:课程上编写了UIView方法。如您所料,该方法是[UIViewController] 1的一部分,而不是[UIView] 2,因此只会在UIViewController上调用。

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

更新

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

答案 1 :(得分:1)

每次将superview呈现给屏幕时都会调用这些委托方法,并且应该在UIViewControllers中实现。

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

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

答案 2 :(得分:1)

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

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

相关问题