2013-03-01 73 views
2

當用戶將應用程序置於前臺時,我希望再次調用viewDidAppear。當應用程序到達前臺時調用self.viewDidAppear

- (void)appReturnsActive{ 

    //THIS IS THE BIT THAT DOESNT WORK, BUT [self.viewDidLoad] DOES WORK 
    [self.viewDidAppear]; 
} 

我在我的viewDidAppear方法中創建了appReturnsActive方法。它運作良好:

[[NSNotificationCenter defaultCenter] addObserver:self 
selector:@selector(appReturnsActive) name:UIApplicationDidBecomeActiveNotification 
object:nil]; 

我可以做self.viewDidLoad,但我不能選擇viewDidAppear。有誰知道我可以如何讓這個工作?

謝謝!

+1

請更好地掌握點符號。這種情況不正確。您可以使用方括號**或**點,但不能同時使用這兩個方法。按照慣例,你從來不會對void函數使用點符號。 – borrrden 2013-03-01 08:13:00

回答

6

你只是簡單的說錯了。它應該是

[self viewDidAppear:YES]; 

然而,人們不應該把這個或任何viewDidLoad中,viewWillAppear中的等等。將您想要在viewDidAppear:(BOOL)中運行的代碼置於單獨的方法中並調用該方法。

希望它有幫助!

+0

因此,明智的做法是創建一個新方法,並從viewDidAppear和appReturnsActive中調用該方法?這只是爲了防止混亂/保持組織更有條理? – Brandon 2013-03-01 08:04:28

+2

通過不手動調用通常由OS調用的函數來防止不必要的行爲。 – borrrden 2013-03-01 08:14:08

3

您是否試過[self viewDidAppear:YES][self viewDidAppear:NO]

0

方法viewDidAppear:將在每次視圖變爲可見時自動調用,不需要您自己調用它。如果您在此方法上有一些代碼需要從其他位置運行,我建議您添加一個包含這些說明的新方法。 viewDidAppear:也將執行可能會影響性能的視圖相關操作。所有的方法,如果您需要調用它,則缺少BOOL參數,請參閱documentation

0

當使用遏制API,使用– beginAppearanceTransition:animated:– endAppearanceTransition

如果要實現自定義的容器控制器,用這種方法告訴孩子,其意見將要出現或消失。不要直接調用viewWillAppear :, viewWillDisappear:,viewDidAppear :,或viewDidDisappear:。

調用addSubView將自動觸發viewWillAppear:viewDidAppear:如果視圖的的viewController是兒童視圖控制器,因此主叫viewWillAppear:直接將觸發視圖將外觀的方法兩次。使用beginAppearanceTransition:動畫:and - endAppearanceTransition`將抑制自動行爲,因此您只能調用一次。

相關問題