2010-08-09 36 views
1

我有一個tabbar應用程序,其中有一個屏幕根據超過選​​項卡屏幕的表視圖中顯示的數據顯示統計信息。一旦統計視圖再次被選中,我想刷新這個視圖。我已經實現了tabbarcontrollerdelegate協議,以在viewcontroller.tabbaritem.title isequaltostring:@「foo」時執行操作。這對我的nslog語句工作正常,但是當我嘗試並觸發viewcontroller執行viewdidload方法時,它從來沒有發生過。並且刷新統計視圖的代碼位於viewdidload方法中。tabBarController更改時執行操作

從我的AppDelegate

- (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 
}