我仍然是Objective C的新手,我想知道有关viewDidDisappear的一些事情。 我有一个播放声音的应用程序(使用AVAudioPlayer),我想在切换视图时停止声音。
如果我在视图控制器实现中执行此操作:
- (void)viewDidDisappear:(BOOL)animated {
[self.audioPlayer stop];
}
它工作正常。但是我脑子里的小程序员说我没有正确使用它。 我很确定你应该用一个布尔参数来调用viewDidDisappear,而不是仅仅指定(BOOL)动画;此外,在我的视图切换中有一些动画会很好...再说一遍,这可能是一个完全不同的讨论!
那么,我做错了什么,我怎么才能正确使用它呢?我是否必须将呼叫链接为按钮动作?实际声明函数本身的正确播放在哪里? 感谢。
答案 0 :(得分:18)
我实施viewDidDisappear:(BOOL)animated
EXTENSIVELY ,以及viewWillAppear
,viewWillDisappear
和viewWillDisappear
实施此方法的主要原因是让您的观点控制器在事件中执行某些操作,例如viewDidDisappear
您不会调用此方法,但您的应用程序将调用您的视图控制器来执行在那里实现的操作。由于这是继承方法,只要确保可以完成超类中所有继承的实现,就可以实现viewDidDisappear
。所以,我建议你改变你的代码:
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:(BOOL)animated]; // Call the super class implementation.
// Usually calling super class implementation is done before self class implementation, but it's up to your application.
[self.audioPlayer stop];
}
答案 1 :(得分:10)
- (void)viewDidDisappear:(BOOL)animated
是方法声明,而不是任何类型的调用。当视图控制器被操纵时,UIKit调用该方法本身;您不需要自己调用它,除非您编写自己的代码使视图控制器出现并通过直接操作它们控制的视图而消失(例如,如果您因某种原因重写UINavigationController)。
你做错了什么:你必须在实施的某个地方调用[super viewDidDisappear:animated]
,否则事情可能会中断。
答案 2 :(得分:4)
您脑海中的“小程序员”声音可能更多地用于程序编码,您可以在其中调用操作系统并告诉它该做什么。 Cocoa Touch使用事件驱动的范例,其中您的程序具有操作系统(框架)在良好且准备好时调用的例程(方法)。 viewDidDisappear是其中一个例程。只需坐下来,等待操作系统调用它(假设您已正确设置所有内容。)
答案 3 :(得分:2)
viewDidDisappear:
是一种可选方法,当视图确实消失时,您的视图可以利用该方法执行自定义代码。您并不需要在视图中使用此代码,并且您的代码应该(几乎?)永远不需要调用它。