2010-08-09 3 views
1

탭 화면의 테이블 뷰에 표시된 데이터를 기반으로 통계를 표시하는 하나의 화면이있는 탭바 응용 프로그램이 있습니다. 통계보기가 다시 선택되면이보기를 새로 고침하고 싶습니다. viewcontroller.tabbaritem.title isequaltostring : @ "foo"가 실행될 때 액션을 취하기 위해 tabbarcontrollerdelegate 프로토콜을 구현했습니다. 내 nslog 문을 잘 작동하지만 viewcontroller를 실행하여 viewdidload 메서드를 실행하면 결코 발생하지 않습니다. 그리고 통계보기를 새로 고치는 코드는 viewdidload 메소드에 있습니다. 내 AppDelegate에에서tabBarController가 변경 될 때 작업 수행

- (void)tabBarController:(UITabBarController*)tabBarController didEndCustomizingViewControllers: (NSArray*)viewControllers changed:(BOOL)changed 
{ 
} 

- (void)tabBarController:(UITabBarController*)tabBarController didSelectViewController:(UIViewController*)viewController { 

    if([viewController.tabBarItem.title isEqualToString:@"Summary"]) { 
     NSLog(@"didSelectViewController %@", viewController.tabBarItem.title); 
     [viewController viewDidLoad]; //FAIL 
    } 

} 

답변

1

스스로 viewDidLoad를 호출하지 마십시오. 이는 뷰가로드 된 후 뷰 컨트롤러로 전송되는 대리자 메서드이므로 수동으로 호출하면 안됩니다. 이 경우

는 탭 바 컨트롤러에 의해 관리되는 전망이 뷰 컨트롤러 viewWillAppear:, viewDidAppear:, viewWillDisappear:viewDidDisappear 전송된다.

보기를 표시하거나 숨길 때 작업을 수행하려면이 방법을 사용해야합니다.

예 : viewDidAppear:을 구현하고 통계보기를 새로 고침하십시오.

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; // don't forget to call super, this is important 

    // do your refreshing here 
} 
관련 문제