2010-08-09 30 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 
}