2012-04-04 1 views
0

도움이 되시면 감사하겠습니다.보기가 viewController 외부에서로드 된 것을 알 수 있습니다.

나는 그 viewController 외부에서 뷰가로드되었다는 프로그래밍 방식으로 알려주는 방법을 찾고있다.

보기가로드되고 단추가 나타난 후 내 기본보기에 5 개의 단추가 있다고 가정하면 해당 파일이로드 된 다른 파일 (해당 viewContrller 외부)에 알림을 받고 싶습니다. 어떻게/어떻게 확인할 수 있습니까?

일부 가로 세로 프로그래밍이 필요합니까?

+0

이 뷰 컨트롤러의 소스 코드에 아무 것도 추가/변경하지 않을 수 있습니까? 추적하도록하려는 모든 코드 변경 사항은 제어 파일의 해당 viewController 외부에서 코딩해야합니다. – ramo

+0

컨트롤 개체를 다른 개체 내부의 속성 변경 관찰자로 만들 수 있습니다. 나는 대답으로 대답을 업데이트했다. –

답변

2

NSNotificationCenter를 사용하십시오. 클래스간에 통신 할 수 있습니다.

0

다른 개체 안에 사용자 지정 NSNotification을 수신합니다. View Controller가 라이프 사이클 중 가장 중요한 부분 (viewDidLoad, viewDidAppear ...) 동안 알림을 게시하도록하십시오.

알림을 게시 할 수 없으면 keyPath를 관찰하는 것이 좋습니다. 예를 들어, 제어 대상이 뭔가를 넣고 observeValueForKeyPath:을 구현할 수 있습니다

[viewController addObserver:self 
       forKeyPath:@"view" 
        options:NSKeyValueObservingOptionNew 
        context:NULL]; 
0

NSNotificationCenter 또는 대리인 방법이 작업을 수행 할 수있는 가장 적절한 방법입니다.

0

다른 사람이 제안한 또는 KVO와 같이 알림을 사용하여이 작업을 수행 할 수 있지만 이는 디자인 문제를 강력하게 나타냅니다. 뷰 컨트롤러의 내부 뷰에 직접 액세스하면 안됩니다. 그래서 더 깊은 질문입니다 : 왜 당신은 알고 싶습니까?

내 경험상 가장 가능성있는 원인은 다른 개체가 제목을 설정하거나 사용하도록 수정하는 것입니다. 이것은 MVC를 깨고 아마도 당신이 고치려고하는 종류의 문제로 이어진다. 이를 처리하는 올바른 방법은 다양한 뷰 컨트롤러간에 공유되는 모델 객체에 데이터를 저장하는 것입니다. 현재 뷰 컨트롤러는 모델의 변경 사항을 관찰하고 UI 요소를 적절하게 업데이트 할 수 있습니다.

+0

나는 그 viewController 외부에서 뷰가로드된다는 것을 프로그램 적으로 알리는 방법을 찾고있다. NSNotificationCenter를 사용하거나 대리자 메서드를 사용하거나 뷰에 태그를다는 등의 클래스간에 통신하는 것을 이해합니다.하지만 뷰 컨트롤러의 소스 코드에서 아무 것도 변경하지 않으려합니다. 나는 외부에서 이것을 관리하기 위해 라이브러리 나 프레임 워크처럼 sth를 말하게하고 싶습니다. 지금까지 도움이되지 않은 모든 검색 결과는 Objective-C에서 몇 가지 Aspect Oriented Programming이있는 것처럼 보입니다. – ramo

+0

왜보기 컨트롤러의 개인 정보에 액세스하려는 이유에 대해 설명 할 수 있습니까? (보기는 관리 책임입니다.) MVC를 깨는 것은 코코아에서 당신을 물어 경향이 있습니다. 여기에서 사용할 도구는 KVO (Key Value Observing)이지만 설계 문제를 강력하게 제안합니다. –

관련 문제