我有一个标签栏应用程序,其中有一个屏幕根据超标签屏幕的表格视图中显示的数据显示统计信息。我想再次选择统计视图后刷新此视图。我已经实现了tabbarcontrollerdelegate协议,以便在viewcontroller.tabbaritem.title isequaltostring:@“foo”时执行操作。这对我的nslog语句工作正常,但是当我尝试触发viewcontroller执行viewdidload方法时,它永远不会发生。刷新统计信息视图的代码在viewdidload方法中。
来自我的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
}
}
答案 0 :(得分: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
}