2011-07-17 3 views
0

ViewControllerA, viewControllerB 및 viewControllerWeb이라고 가정 해 봅시다. 뷰 컨트롤러가 많은 일반 앱이 있습니다.다른 viewController가 화면 상에있는 동안 특정 UIViewController에서 메서드를 호출합니까?

"viewControllerWeb"은 UIWebViewDelegate이며 UIWebView가 있습니다. viewControllerA 또는 viewCOntrollerB와 상호 작용할 때도 메서드를 호출하고 싶습니다. ([webview stringByEvaluatingJavaScriptFromString:]과 같은 메소드)

기본적으로 "viewControllerWeb"을 배경으로 열어 두는 것이 좋습니다. 누구나 이런 식으로하는 법을 아십니까? 내가 잘못 생각한거야?

여러분이 도와 주길 바랍니다. 고마워요!

답변

2

WebViewController가 만들어진 VC에서이 메서드를 호출하려면 webViewController를 전역 변수로 만들어 쉽게 수행 할 수 있습니다.

외부 VC에서 액세스하려는 경우 WebViewController를 앱 내의 어느 곳에서나 액세스 할 수있는 싱글 톤으로 만들 수 있습니다. 이런 식으로 뭔가를 할 것이다 :

[[WebViewController sharedController] stringByEvaluatingJavaScript...]

편집 : 당신은 어디에서 WebViewController에 액세스 할 수 있도록 할

static WebViewController *sharedController = nil; 

+ (WebViewController*)sharedController { 

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

    return sharedController; 
} 

RyanR는 의견에서 지적한 바와 같이,이 분명히 계속됩니다 명시 적으로 해제 할 때까지 뷰 컨트롤러는 유지됩니다. 싱글 톤의 흔한 실수는 그들에 대해 잊어 버리고 결코 풀어 내지 않는 것입니다.

+1

다소 비싼 객체이기 때문에 어떤 시점에서'sharedController'를 해제해야한다는 것을 제외하면 이것은 좋은 방법입니다. – RyanR

+0

고마워, 나는 이것을 시도하고 너희들에게 돌아올거야. –

1

당신은 뷰 컨트롤러의 복사본을 유지하면 안됩니다. 기능을 공유하려는 경우,이를 싱글 톤으로 추출하십시오.

관련 문제