2011-07-17 49 views
0

我有一堆視圖控制器的常規應用程序 - 讓我們說viewControllerA,viewControllerB和viewControllerWeb。當另一個viewController在屏幕上時調用某個UIViewController的方法?

「viewControllerWeb」是UIWebViewDelegate,只是在這一個UIWebView。即使在我與viewControllerA或viewCOntrollerB交互時,我也想調用它。 (方法,如[webview stringByEvaluatingJavaScriptFromString:]

所以基本上,這似乎是我想要的「viewControllerWeb」是在後臺打開莫名其妙。任何人都知道如何完成這樣的事情?我在想這個錯誤的方式嗎?

希望你們能幫助我了!非常感謝!

回答

2

好吧,如果你想打電話從哪裏WebViewController創建VC這些方法,你可以很容易做到這一點通過使webViewController一個全局變量。

如果你想從外部VC訪問它,那麼你可以讓WebViewController,您可以從您的應用程序內的任意位置訪問一個單例。像這樣的東西會做:

static WebViewController *sharedController = nil; 

+ (WebViewController*)sharedController { 

    if(sharedController == nil) 
     sharedController = [[WebViewController alloc] initWithNibName:@"WebViewController" bundle:[NSBundle mainBundle]]; 

    return sharedController; 
} 

這將允許您從任何地方訪問你WebViewController:

[[WebViewController sharedController] stringByEvaluatingJavaScript...]

編輯:由於RyanR在評論中指出,這顯然將讓您的視圖控制器保留直到你明確釋放它。單身的常見錯誤是忘記他們,永遠不要釋放他們 - 確保你做到了!

+1

這是一個很好的路要走,除非你確實需要時纔可以肯定在某些時候釋放'sharedController',因爲它是一個比較昂貴的對象。 – RyanR

+0

謝謝,我會試一試,然後回覆你們。 –

1

你不應該保留你的視圖控制器的副本。如果您想要共享功能,請將其抽象爲單例。

相關問題