2011-03-05 26 views
10

我對Objective C仍然很陌生,我想知道關於viewDidDisappear的一些事情。 我有一個播放聲音的應用程序(使用AVAudioPlayer),我想在視圖切換時停止聲音。iPhone:viewDidDisappear的正確用法是什麼?

如果我做這在我的視圖控制器實現:

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

它工作正常。但是我腦子裏的小程序員說我沒有正確使用它。 我敢肯定,你應該調用viewDidDisappear與布爾參數,而不是隻指定(布爾)動畫;此外,在我的視圖中切換一些動畫會很好......然後再次,這可能是一個完全不同的討論!

那麼,我做錯了什麼,我該如何正確使用它?我是否必須鏈接呼叫按鈕操作?在哪裏才能真正地聲明函數本身? 謝謝。

回答

16

我實現viewDidDisappear:(BOOL)animated廣泛,與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]; 
} 
10

- (void)viewDidDisappear:(BOOL)animated是一種方法聲明,而不是任何形式的調用。當視圖控制器被操作時,該方法本身被UIKit調用;你不需要自己調用它,除非你編寫自己的代碼,通過直接操縱它們控制的視圖(例如,如果你因爲某種原因重寫了UINavigationController)而使得視圖控制器出現和消失。

但是,您做錯了某些事情:您必須在執行過程中的某處撥打[super viewDidDisappear:animated],否則可能會導致事件中斷。

+0

所以我想我確實理解它或多或少是正確的,謝謝!但是,請您詳細說明[super viewDidDisappear:animated]調用嗎?對於整個超級商業,我並沒有完全掌握......我現在是一個編碼危機:p如果我把這個漏掉了,會發生什麼? – seeafish

2

viewDidDisappear:是一種可選方法,當視圖確實消失時,視圖可以利用它來執行自定義代碼。你不需要在你的視圖中使用它,並且你的代碼應該(幾乎?)永遠不需要調用它。

4

在你心目中的「小程序員」的聲音可能更習慣的程序編碼,其中調用OS,並告訴它做什麼。 Cocoa Touch改爲使用事件驅動範例,其中您的程序具有OS(框架)在良好且準備好時調用的例程(方法)。 viewDidDisappear是其中的一個例程。只要坐下來,等待操作系統調用它(假設你已經正確設置了所有東西)。

+0

是啊... PHP是我的強項,我必須說我剛剛開始掌握正確的面向對象和整個MVC的事情。然而,在這種情況下,實際上我需要應用程序在視圖消失時執行某些操作。那不需要告訴我的觀點使用viewDidDisappear來做到這一點嗎? – seeafish

+0

@capitales:沒有。相反。你不告訴視圖。當視圖消失時,OS會告訴你。 – hotpaw2

+1

woah ...客觀c知道功夫!我想我有點明白你的意思。但通過邏輯,我應該能夠以某種方式檢查viewDidDisappear並且操作系統應該以「是的」做出響應,對嗎? – seeafish