iPhone刷新tabcontroller和内容

时间:2012-05-18 07:45:59

标签: iphone xcode uitabbarcontroller

我想解决两个问题,一个是刷新标签控制器本身,另一个是刷新tabcontroller的内容。

我希望刷新选项卡控制器本身的原因是我的应用程序有一个Web调用,它返回一个JSON,用于设置选项卡的顺序,并设置每个选项卡的内容。我已经得到它,以便当您退出应用程序并重新进入应用程序时,通过放置

刷新选项卡控制器
exit(0)

在AppDelegates ApplicationDidEnterBackground中,这样当用户退出并再次进入时,控制器将被刷新。在applicationDidFinishLaunchingWithOptions中,我设置了一个调用JSON的Web调用,然后用于设置Tab键顺序。我知道这不是一个很好的方法,但暂时,它是我能想到的唯一解决方案。我怎样才能刷新TabController?

对于标签内容,使用此代码

进行刷新
   becomeActiveObserver = [[NSNotificationCenter defaultCenter] 
                         addObserverForName:UIApplicationDidBecomeActiveNotification
                         object:nil 
                         queue: nil 
                         usingBlock:^(NSNotification *note){ 

                          [self refresh];
                          [self viewDidUnload];
                         }]; 

我为5个标签中的每一个设置了这种类型的代码。这非常有效,但问题是当应用程序退出并再次访问时,内容只会刷新。网络通话将是定期的,我希望在进行网络通话时,内容将自动刷新,而不必再次退出并进入应用程序。

出于测试目的,我在我的设置屏幕中设置了一个按钮(设置屏幕只是我的一个选项卡中的另一个视图),点击时使用读取JSON存储在iPhone目录中,该目录与从中检索到的JSON不同网络电话(节省我不得不去服务器并继续更改JSON)。单击此按钮时,应该读取此新JSON,更新内容,然后刷新视图。我已经测试了这个并且正在读取JSON并且正在更新数据(我在每个屏幕上设置了一个按钮,它会读出它用来确认这个的JSON)但是在我退出并进入之前视图不会刷新申请再次。

我在设置屏幕中设置的临时代码用于读取存储在设备上的JSON

-(IBAction)RefreshApp:(id)sender{     



NSFileManager *fileManager = [NSFileManager defaultManager];

     NSString *filePath = [[NSBundle mainBundle] pathForResource:@"widgjson" ofType:@"json"];  
     NSData *myData = [NSData dataWithContentsOfFile:filePath];  
     NSString *responseString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];   

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *docDir = [paths objectAtIndex: 0];
        NSString *docFile = [docDir stringByAppendingPathComponent: @"json.txt"];
        [fileManager removeItemAtPath:docFile error:NULL];
        [responseString writeToFile:docFile atomically:NO encoding:NSUTF8StringEncoding

DashboardVC *db = [[DashboardVC alloc] init];
    [db refresh];
    [db viewDidUnload];

}

在底部,您可以看到我尝试从其中一个标签调用刷新以刷新其中一个视图,看看是否有效,但没有运气。当你从类本身内部调用它时,刷新代码似乎只能工作,当从另一个类访问时,我似乎无法刷新它。

进行网络通话时,我希望一次刷新每个标签。关于如何做到这一点的任何想法?

如果有人能指出我正确的方向,我将非常感激。

1 个答案:

答案 0 :(得分:2)

UITabBarController的setViewControllers: animated:方法就是你想在这里使用的方法。

当您收到要重新排序选项卡的通知时,使用该功能传递一个阵列栏中所拥有(和引用)的各种视图控制器,这些控制器按您希望的顺序排列你的标签出现。