我想解决两个问题,一个是刷新标签控制器本身,另一个是刷新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];
}
在底部,您可以看到我尝试从其中一个标签调用刷新以刷新其中一个视图,看看是否有效,但没有运气。当你从类本身内部调用它时,刷新代码似乎只能工作,当从另一个类访问时,我似乎无法刷新它。
进行网络通话时,我希望一次刷新每个标签。关于如何做到这一点的任何想法?
如果有人能指出我正确的方向,我将非常感激。
答案 0 :(得分:2)
UITabBarController的setViewControllers: animated:
方法就是你想在这里使用的方法。
当您收到要重新排序选项卡的通知时,使用该功能传递一个阵列栏中所拥有(和引用)的各种视图控制器,这些控制器按您希望的顺序排列你的标签出现。