Вызов методов для определенного UIViewController, в то время как другой viewController находится на экране? - PullRequest
0 голосов
/ 17 июля 2011

У меня есть обычное приложение с кучей контроллеров представления - скажем, viewControllerA, viewControllerB и viewControllerWeb.

"viewControllerWeb" является UIWebViewDelegate, и в нем просто есть UIWebView. Я хотел бы вызвать методы, даже когда я взаимодействую с viewControllerA или viewCOntrollerB. (методы типа [webview stringByEvaluatingJavaScriptFromString:])

По сути, мне кажется, что я хочу, чтобы viewControllerWeb каким-то образом был открыт в фоновом режиме. Кто-нибудь знает, как сделать что-то подобное? Я думаю об этом неправильно?

Надеюсь, вы, ребята, можете мне помочь! Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 17 июля 2011

Ну, если вы хотите вызывать эти методы из VC, где был создан WebViewController, вы можете легко сделать это, сделав 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...]

EDIT : Как указывалось в комментарии RyanR, это, очевидно, сохранит ваш контроллер представления, пока вы явно не отпустите его. Распространенная ошибка синглетонов - забывать о них и никогда не выпускать их - не забудьте!

1 голос
/ 17 июля 2011

Вы не должны сохранять копию своего контроллера представления.Если вы хотите, чтобы функциональность была предоставлена ​​в общий доступ, абстрагируйте ее от одиночного.

...