2012-10-05 5 views
1

navigationController 내부, 내가 ChildViewController이고 뒤로 버튼을 탭한 경우. 내가 떠나기 전에 나는 어떤 데이터를 parentViewController에 보내고 싶다.뒤로 버튼을 누를 때 수행 할 작업

ChildViewController 또한, 자신의 아이를 가지고 있기 때문에, 게다가

-(void)viewWillDisappear; 

먼저 사용하여이 작업을 수행하는 이유는 어떤 간단하고,이 적용될 때까지, viewWillDisappear도 호출됩니다.

둘째, 사용자가 집 버튼을 누르면. 호출됩니다. (아마도)

이 작업을 수행하기위한 합리적이고 적절한 방법은 무엇입니까?

답변

2

:

  1. 두 번째 컨트롤러가 멀리 갈 때 통지를 보내 부모가 그것을 듣고 있습니다.

  2. 두 번째 컨트롤러에서 상위 메서드를 직접 참조 할 수 있도록하는 대리자 프로토콜을 만듭니다.

  3. 부모의 viewWillAppear:을 사용하고 isMovingToParentViewController 속성이 방금 다시 나타나는지 여부를 확인하십시오.

귀하의 가치 전달 조건 및 가치 유용성에 가장 적합한 것을 적용하십시오.

+0

첫 번째 두 개는'viewWillDisappear'를 탐지하는 것을 제외하고 사용자가 뒤로 버튼을 누르는 지 알지 못하기 때문에 작동하지 않는 것 같습니다. 그러나'ViewWillDisappear'에서 우리는 그것이 터지거나 자식 VC에 푸시되는지 알 수 없습니다. 따라서 알림을 보내거나 대리자 메서드를 실행할 방법이 없습니다. 마지막 하나는 굉장한 것처럼 보였다.어떻게 그 특성을 찾았습니까? 전체 UIViewController 참조를 통해 읽었습니까? –

+0

위의 내용은 View Life Cycle에 고려되는 일반적인 속성입니다. – Arvind

2

이 문제는 UINavigationControllerDelegate을 사용하여 해결할 수 있습니다.

이 경우 컨트롤러를 추적하는 데 사용할 수 있으며 navigationController:willShowViewController:animated:을 구현하여 컨트롤러간에 필요한 데이터를 전송할 수 있습니다. viewWillDisappear 알림에 연결하는 것보다 훨씬 깔끔합니다. 모든 컨트롤러에 데이터 전송 로직을 포함하지 않고 해당 델리게이트 내에서 데이터 전송 로직을 분리 할 수 ​​있기 때문입니다.

+0

저는이 두 대리자가 너무 단순하고 한 수준의 탐색에 유용하다고 생각하지만 여러 수준에서 작동하지 않는 것 같습니다. 아이가 뻥 소리를 내거나 부모가 밀기 때문에 전화가 왔는지 알 수 없기 때문입니다. 대답을위한 thx .;) –

+0

나는 그 설명을 얻지 않았다. 그러나 ok. 적어도 나를 위해 일합니다 ... – mprivat

4

modalViewController가 표시되거나 추가 viewController가 푸시 될 때 viewWillDisappear가 호출되는 문제를 해결하는 간단한 해결책이 있습니다. 예 : 실제로 스택에서 제거 된 경우를 감지합니다.

-(void)viewWillDisappear:(BOOL)animated { 
    NSUInteger ind = [[self.navigationController viewControllers] indexOfObject:self]; 
    if (ind == NSNotFound) { 
     // do something, we're coming off the stack. 
    } 
} 

이점은 UINavigationController를 하위 클래스로 만들 필요가 없다는 것입니다.

출처 : 당신은 다음과 같은 방법으로이 작업을 수행 할 수 있습니다 http://objectivesea.tumblr.com/post/21705735018/poppingoffthestack

+1

이것은 멋진 트릭처럼 보였습니다. 답장이 없으면 당신을 선택했을 것입니다. 'isMovingToParentViewController'와'isMoveFromParentController'는 더 공식적으로 보입니다.) –

관련 문제