2011-12-08 5 views
0

쉽습니다.뷰 전환시 트리거 이벤트

firstView와 SecondView의 두 가지보기가 있다고 가정합니다.

firstView는 ROOT 뷰입니다.

나는 firstView에서 secondView를로드

secondView *secondViewController; 
secondViewController = [[SecondView alloc] 
         initWithNibName:@"SecondView" bundle:nil]; 
[self.view addSubview:SecondViewController.view]; 

내가 secondView에서 "뒤로"버튼을 추가했습니다. > secondView에서 secondView, 의 viewDidLoad가 트리거 -

firstView :

내가 firstView로 돌아가 그 버튼을 클릭

: 여기

[self.view removeFromSuperView]; 

질문입니다.

어떻게 내가 secondView에 removeFromSuperView를 사용하여 다시 갈 때 에 이벤트가 firstView 통보 트리거 할 수 있습니다?

+0

NSNotificationCenter를 사용하면 두 번째보기를 제거 할 때 이벤트를 수신하고 게시 할 수 있습니다. 또는 두 번째 뷰 호출에서 첫 번째 뷰 "보기가 나타납니다"메서드를 호출 할 수 있습니다. 또는 두 번째보기 컨트롤러에서 대리자를 만들고 "보기가 사라집니다"메서드가 호출 될 때 첫 번째 콜백을 수행 할 수 있습니다. 클래스간에 메시지를 전달하는 여러 가지 방법. 나는 내가 생각하는 통보를 위해 갈 것이다. 그렇다고해도 뷰 컨트롤러 간의 긴밀한 의존성은 생기지 않습니다. –

답변

0

정확히하고 싶습니까? 아마 첫 번째보기 컨트롤러에서 두 번째보기 컨트롤러로 이동하기를 원합니까? 그런 다음 첫 번째보기 컨트롤러로 돌아가십시오. 이 경우 그냥 같이 할 첫 번째 컨트롤러가 이미 탐색 컨트롤러에 embbeded 경우 :

[self.navigationController pushViewController:secondViewController animated:YES]; 

하지만 당신은 단지 다음 인터페이스 빌더에서보기를 만들고 싶은 경우 첫 번째보기 위의 추가 작업을 수행 할 수 있습니다

- (void) backButtonClicked:(id)sender { 
    [self.view removeFromSuperView]; 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"back" 
                 object:self.view]; 
} 

당신은 다음과 같이 첫 번째 뷰 컨트롤러에서이 이벤트에 대한 관찰자를 추가 할 수 있습니다 :

- (void) pushSecondViewController { 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(secondViewDidGoBack:) 
               name:@"back" 
               object:secondViewController.view]; 

    SecondView *secondViewController = [[SecondView alloc] initWithNibName:@"SecondView" 
                    bundle:nil]; 
    [self.view addSubview:secondViewController.view]; 
} 

- (void) secondViewDidGoBack:(NSNotification *)notification { 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 

    NSLog(@"My Second View Did Go back !"); 
} 
당신이 두 번째보기에서 뒤로 버튼을 클릭하면 이벤트를 게시 알림 센터를 이용

도움이되기를 바랍니다.

+0

xxxAppDelegate * objDelegate = (xxxAppDelegate *) [[UIApplication sharedApplication] delegate]; [[objDelegate firstViewController] doThisWhenGoingBack]; –

+0

방금 ​​델리게이트를 사용하여 [self.view removeFromSuperView] 아래에 추가했습니다. 그것은 완벽하게 작동했습니다. BTW, U 모든 방법 감사합니다! –