2012-11-22 81 views
1

我有一個自定義navigation實現,但我有一個問題。UIView removeFromSuperview調用viewWillDisappear

我彈出一個UIViewController後,我手動調用viewWillDisappear,但由於某些原因,它被稱爲當我再次打電話removeFromSuperviewUIViewController'sUIView

我該如何阻止發生?出現這種情況iOS 6,我相信它不會爲iOS 4,我還沒有測試,我已經使用的是iOS 5:

- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers { 
    return NO; 
} 

,但它並不能幫助。

我沒有使用dismissViewControllerAnimated。我已經實現了一個自定義的導航控制器,我使用自己的堆棧,並通過在屏幕上和屏幕外動畫他們的視圖來「推」和「彈出」UIViewControllers,我手動調用viewWillAppearviewWillDisappear。問題是,在我「彈出」屏幕UIViewController之後,當我撥打[currentViewController.view removeFromSuperView]viewWillDisappear方法被調用,而我不想這樣做,因爲我已經調用了它。

任何幫助,將不勝感激。

+0

爲什麼不使用否定 – IronManGill

+0

您是否使用新的視圖控制器遏制API? ('addChildViewController'等)?如果是這樣,他們會自動爲您調用'viewWillDisappear:'。 –

+0

不,我不是。但我找到了解決方案,我在下面回答。 – Cosmin

回答

2

好吧,我找到了解決辦法。問題是我打電話[controller.view removeFromSuperview],我注意到在調用棧中調用了[UIViewcontroller _setViewState:animated]。所以,我做了一個小黑客:

UIView *view = controller.view; 
controller.view = nil; 
[view removeFromSuperView]; 
[controller release]; 

現在,viewWillDisappear不再被調用時調用[查看removeFromSuperview。希望這會幫助某人。

0
[self dismissViewControllerAnimated:YES completion:NULL]; 

嘗試使用這個....

+0

我沒有使用dismissViewControllerAnimated。我已經實現了一個自定義導航控制器,我使用自己的堆棧,並通過在屏幕上和屏幕外動畫他們的視圖來「推」和「彈出」UIViewControllers,並且我手動調用viewWillAppear和viewWillDisappear。問題是,當我彈出一個UIViewController離開屏幕後,當我調用[currentViewController.view removeFromSuperView]時,viewWillDisappear方法被調用,而我不想這樣做,因爲我已經調用它了。 – Cosmin

+0

[self dismissViewControllerAnimated:YES completion:NULL]; >總是'錯誤'IMO ...模態視圖控制器不應該知道它被呈現。主持人應該打電話解僱 –

相關問題