2011-08-09 68 views
0

所以我有一個應用程序,我正在實現一個通用工具欄,這種工具欄就像一個標籤欄+工具欄,並在我的所有視圖控制器上都有顯示。我有一個自定義工具欄,它具有一些按鈕,用於操縱我在App Delegate中創建的一些導航視圖控制器。不過,我有麻煩這些按鈕的工作,下面是一個按鈕的操作方法的一個例子中,我使用:如何從另一個班級訪問superview?

Test_ClassAppDelegate *test_ClassAppDelegate = (Test_ClassAppDelegate*)[[UIApplication sharedApplication] delegate]; 
[[[test_ClassAppDelegate window] superview] removeFromSuperview]; 
[[test_ClassAppDelegate window] addSubview:[[test_ClassAppDelegate helpNavController]view]]; 
[test_ClassAppDelegate release];  

我想我可能會錯誤的主要領域是我的第二行,我要刪除我的超級視圖。我甚至不確定這是否是正確的做法。我知道我可以在應用程序委託本身中實現此代碼,但是好奇的是,無論如何要從其他位置刪除超級視圖,或者如果其他人看到此代碼的任何問題。謝謝。

回答

0

是,該行肯定是一個問題...

UIWindow reference

窗外是視圖層次結構的根視圖。

因此,一個窗口沒有superview,和你問的windowsuperview將自己從superview刪除。這不是出於同樣的原因,它是這樣一個繞口令 - 它只是沒有意義。

此外,-removeFromSuperview不會刪除一個上海華盈,它消除了你從上海華盈發送-removeFromSuperview的看法。你看到區別了嗎?

這聽起來像你想要根據用戶選擇更改根視圖控制器。如果是這種情況,請參閱我對this question的回答以及SO上的其他許多人。

+0

謝謝你的工作,但是當我試圖切換到另一個rootviewcontroller時,它凍結了。有某處存在內存泄漏。被取代的rootviewcontroller是否必須重新初始化或解除分配? –

+0

沒有看到你的代碼,很難說。但是,是的,內存管理規則和以往一樣。 – GarlicFries

相關問題