iPhone:viewDidDisappear 的正确用法是啥?

Posted

技术标签:

【中文标题】iPhone:viewDidDisappear 的正确用法是啥?【英文标题】:iPhone: What is the correct usage of viewDidDisappear?iPhone:viewDidDisappear 的正确用法是什么? 【发布时间】:2011-03-05 14:45:19 【问题描述】:

我对Objective C 还是很陌生,我想知道关于viewDidDisappear 的一些事情。 我有一个播放声音的应用程序(使用 AVAudioPlayer),我想在切换视图时停止声音。

如果我在我的视图控制器实现中这样做:

- (void)viewDidDisappear:(BOOL)animated 
    [self.audioPlayer stop];

它工作正常。但是我脑子里的小程序员却说我没有正确使用这个。 我很确定您应该使用布尔参数调用 viewDidDisappear,而不仅仅是指定 (BOOL)animated;此外,在我的视图切换中有一些动画会很好......再说一次,这可能是一个完全不同的讨论!

那么,我做错了什么,我该如何正确使用它?我是否必须链接呼叫按钮操作?真正声明函数本身的正确玩法在哪里? 谢谢。

【问题讨论】:

【参考方案1】:

我实现了viewDidDisappear:(BOOL)animated EXTENSIVELY,以及viewWillAppearviewWillDisappearviewWillDisappear 实现这个方法的主要原因是让你的视图控制器在事件中做一些事情,比如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];

【讨论】:

【参考方案2】:

- (void)viewDidDisappear:(BOOL)animated 是一个方法声明,而不是任何类型的调用。 UIKit 在操作视图控制器时调用该方法本身;你不需要自己调用它,除非你正在编写自己的代码,通过直接操作它们控制的视图来使视图控制器出现和消失(例如,如果你出于某种原因重写 UINavigationController)。

但是你做错了:你必须在你的实现中调用[super viewDidDisappear:animated],否则事情可能会中断。

【讨论】:

所以我想我的理解或多或少是正确的,谢谢!但是,您能否详细说明一下 [super viewDidDisappear:animated] 调用?我还没有完全了解整个超级业务......我目前是一个编码危险:p 如果我把它排除在外会发生什么?【参考方案3】:

你脑海中的“小程序员”可能更习惯于程序化编码,你调用操作系统并告诉它要做什么。相反,Cocoa Touch 使用事件驱动的范例,您的程序有例程(方法),操作系统(框架)在其良好且准备就绪时调用这些例程(方法)。 viewDidDisappear 就是这些例程之一。只需坐好,等待操作系统调用它(假设您已正确设置所有内容。)

【讨论】:

是的... php 是我的强项,我必须说我刚刚开始掌握正确的 OO 和整个 MVC 的东西。但是,在这种情况下,我实际上需要应用程序在视图消失时执行某些操作。这不保证需要告诉我的视图使用 viewDidDisappear 来做到这一点吗? @capitales:不。相反。你不说观点。当视图消失时,操作系统会告诉你。 哇...目标c会功夫!我想我有点明白你的意思了。但是按照逻辑,我应该能够以某种方式检查 viewDidDisappear 并且操作系统应该响应“是的”,对吗? @capitales7 :操作系统在调用 viewDidDisappear 时会告诉您,“是的,它确实”消失了。你必须等待它告诉你。 (当它告诉你时,你可以设置一个标志。)【参考方案4】:

viewDidDisappear: 是一种可选方法,当视图确实消失时,您的视图可以利用该方法执行自定义代码。您不需要在视图中拥有它,并且您的代码应该(几乎?)永远不需要调用它。

【讨论】:

以上是关于iPhone:viewDidDisappear 的正确用法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

UIViewController 的 viewDidAppear/viewDidDisappear:应该在啥时候调用这些方法?

viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear 指南

UIView 的 viewDidDisappear

viewDidDisappear 未调用

iPhone:隐藏应用程序上的键盘输入背景或视图消失

iOS 在调用完成块之前会在 viewDidDisappear 之后等待 CATransaction