我在我的iPhone应用程序中创建了一个UIView。当UIView作为当前屏幕出现时,我想在用户关闭或打开时处理某些事情。我想,我可以在viewWillAppear:
下做到这一点。但是,在UIView中没有调用viewWillAppear:
。它只适用于UIViewController吗?如何为UIView处理viewWillAppear:
或viewDidAppear:
?
更新: UIView我通过程序创建了所有内容,而不是.xib。
请告知。
谢谢!
答案 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)
如果你研究UIView
和UIViewController
的文档,你会发现-(void)viewWillAppear:animated:
的方法是UIViewController
,而不是UIView
,所以为了使用它,它必须通过子类化UIViewController
来实现。通常,对于最佳实践,如果要跟随MVC,任何与视图本身无关的功能都应委托给视图控制器,而不是在UIView
子类的主体中。
使用xib文件创建一个新的视图控制器,然后将自定义视图类链接到xib文件中的视图。