2009-05-05 3 views
1

간단한 탭 바 iPhone 응용 프로그램을 만들고 있습니다. 그것은 두 개의 탭을 가지고 있는데, 하나는 UIWebView이고 다른 하나는 설정을 저장하는 몇 개의 텍스트 필드와 설정을 저장하는 버튼이 있습니다.iPhone 응용 프로그램 - View가 다른보기에서 메소드를 호출하려면 어떻게해야합니까?

사용자가 설정 탭 /보기에서 저장을 클릭하면 UIWebView가 다시로드됩니다. 이미 설정을 저장 했으므로 UIWebView를 새로 고치기 위해 호출하는 방법을 알아 내야합니다.

보기에서 다른보기로 메시지를 보내는 방법에 대해 혼란스러워합니다.

답변

4

내가 한 것은 AppDelegate를 통해 서로 이야기하게하는 것입니다.

[viewController myViewFunction]; 

나 ':

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
    [appDelegate myFunction]; 

MyAppDelegate 뭔가를, 또는 호출 중 하나라는 함수 myFunction이 있습니다

뷰 1이 수행하는 기능을해야합니다 : 예를 들어

여러 개의 뷰를로드하고 (예 : 서로 다른 화면처럼 앞뒤로 이동하는) 꽤 좋은 시스템을 설정하십시오. 난 그냥 pushplay.net이를 작성하고 게시하는 시간을하지 않은 -하지만 난

===에게 ... 며칠 그렇게

편집을하려고합니다 : 좋아, 내가 가진 것을 올렸어. 모든 의견을 주시면 감사하겠습니다.

http://pushplay.net/blog_detail.php?id=27

나는 아래의 댓글이 말하는 것을 이해하지만 나는 서로를 탐색 할 필요 여러 viewcontrollers을 필요에 따라 원활하게 작동 예제를 보여 주도록하겠다.

+0

감사합니다, 의미가 있습니다. 게시물에 세부 사항이 표시되면 여기에 게시하십시오. – Greg

+0

메시지를 다른보기로 프록시 처리하려면 응용 프로그램 대리인을 사용할 필요가 없습니다. 뷰 컨트롤러가 그 역할을합니다. –

+0

이것은 올바른 _kind_ 코드이지만 Nathan이 말한 것처럼 viewController에서 수행해야합니다. appDelegate에 필요한 것 이상을 추가하지 마십시오. 그것은 자신이 소유해야 할 물건으로 충분히 커질 것입니다. –

5

UITabBarController의 프레임 워크에서이 두 가지보기를 사용한다는 사실은 문제의 핵심과 관련이 없습니다. 즉, 응용 프로그램의 한 부분에 다른 부분에서 무언가가 발생했음을 알리기를 원합니다. 이 일의 전형적인 방법은 KVO와 함께, 또는 그렇게처럼 NSNotificationCenter를 사용하여 :

그것은 특정 응용 프로그램의 복잡성과 그 응용 프로그램의 개체 모델에 따라
// Register interest in finding out when the settings are changed 
[[NSNotificationCenter defaultCenter] addObserver:myWebViewController 
    selector:@selector(refreshWebView:) name:@"settingsSaved" object:nil]; 

// Notify interested parties that the settings have changed 
[[NSNotificationCenter defaultCenter] postNotificationName:@"settingsSaved" object:nil]; 
+0

KVO와 알림이이 문제로 인해 과도한 소리를 낸다고 생각하는 것을 제외하고는 –

1

:

  • 하는 경우 뷰는 관련이 있으며 뷰와 관련된 메시지는 서로에게 직접 메시지를 보낼 수 있습니다. 예를 들어 뷰는 하위 뷰에 직접 메시지를 보낼 수 있고해야하며 부모에게 메시지를 직접 보낼 수 있습니다.

  • 뷰가 관련이 없지만 동일한 정보에 대한 데이터를 표시하면 viewController를 통해 메시지를 프록시해야합니다. 이는 뷰 컨트롤러가있는 이유입니다.

  • 강력한 MVC 아키텍처를 사용하는 복잡한 응용 프로그램을 사용하는 경우 모델 객체를 업데이트하고 viewControllers를 통해 뷰에 연결하여 간접적으로 통신해야합니다.이 경우

1

당신은 떨어져 앱 대리인이 응용 프로그램 실행에 다른 뷰 컨트롤러의 대리인으로 웹보기를 잡고 컨트롤러를 할당 가진 아마 더 좋을 것 같아 - 깨끗하게 만들기 위해 프로토콜을 사용하여 찾는 게 아니라, 간단히 말해서 언제든지 위임 유형을 뷰 컨트롤러를 보유한 웹보기로 선언 할 수 있습니다.

알림도 잘 생각하고, 그들을 위해 너무 작은 어떤 일이 없다 -하지만 당신은의 dealloc 같은 장소에서 알림을 수신 거부하는 것이 중요합니다 알고 있어야합니다. 정말 문제가되지 않는 탭 막대보기 컨트롤러의 최상위 수준입니다.

0

당신은 항상 웹보기를 가리키는 탭보기 컨트롤러의 인스턴스 변수를 설정할 수 있습니다. IBOutlet으로 설정하고 인터페이스 빌더에 연결 한 다음 인스턴스 변수에서 메소드를 호출하십시오.

.H 파일 :

IBOutlet UIWebView *webView; 

@property (nonatomic, retain) UIWebView *webView; 

하는 .m 파일 :

@synthesize webView; 

//Then later in your method 
[webView refresh]; //or however you do it 

감사합니다,

카일