【问题标题】:Perform an action when tabBarController changes当 tabBarController 改变时执行一个动作
【发布时间】:2010-08-09 23:06:51
【问题描述】:

我有一个标签栏应用程序,它有一个屏幕,它根据标签屏幕的表格视图中呈现的数据显示统计信息。一旦再次选择统计视图,我想刷新此视图。我已经实现了 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
    }

}

【问题讨论】:

    标签: iphone objective-c cocoa-touch


    【解决方案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
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-17
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 2014-05-29
      相关资源
      最近更新 更多