2010-04-20 167 views
1

我在一個基於視圖的應用程序的類中,一個是用一個視圖控制器創建的。訪問視圖控制器的視圖

當我在視圖控制器內部時,我可以使用self.view訪問它的視圖,但是如果我在類內部時如何訪問相同的視圖?

[[UIApplication sharedApplication] delegate]... //??? what do I put here? 

感謝

回答

1

假設視圖控制器是你的應用程序的代理的一員。您可以訪問它像這樣:(「YourAppDelegate」應該與你的應用程序委託的實際類型名稱代替)

((YourAppDelegate *) [ [ UIApplication sharedApplication ] delegate ]).viewController.view;

+0

是的視圖控制器是委託的成員,但你的這段代碼給我的消息「請求成員視圖的東西不是結構或聯合」......另一個問題是:我可以在這條線在一個通用的方式?我的意思是,無需指定應用程序名稱?我問這個問題是因爲這條線被用於多個應用程序使用的單例內的方法......我認爲這些括號沒有使用正確的語法。謝謝。 – SpaceDog 2010-04-20 00:34:15

+0

雖然編譯器會給你一個警告,但這會在沒有顯式強制轉換的情況下工作。 該錯誤意味着視圖控制器的視圖不存在。 – 2010-04-20 00:38:24

+3

在這種情況下,如果沒有明確的轉換,點符號將不起作用 - 與普通的Obj-C消息發送語法不同,編譯器_needs_要知道如果您使用點語法,類將響應特定的消息,否則它會假定您試圖訪問結構或聯合的成員。你可以使用下面的命令而不用強制轉換(並且得到一個編譯器警告,這很糟糕,所以你不應該在生產代碼中這樣做): '[[[[[UIApplication sharedApplication] delegate] viewController] view];' – 2010-04-20 04:03:25

1

如果你想給一個單身到主的viewController一個參考,一個更好的解決辦法可能是讓你MyAppDelegate在啓動設置你的單身一個的viewController屬性:

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{ 
    [MySingletonClass sharedSingleton].viewController = self.viewController; 
} 

如果您計劃,重新使用一個Singleton像這樣在多個項目中,往往更有意義,設置這些排序來自AppDelegate的屬性。

0

子視圖實際上不應該操縱父視圖,每個類應該管理它自己的視圖。

無論如何,如果你的類是UIView的子類,並且是viewController的子視圖,那麼可以通過訪問superview屬性來獲取你的父視圖來獲取viewController的視圖。