UITableViewController - 在didSelectRowAtIndexPath上调用类的SAME init

时间:2010-10-04 13:59:21

标签: iphone uiviewcontroller

基本上,我被困哈哈。我有一个下载视频的页面。它里面有一个UIProgressView栏。

当用户在表视图中选择一行时,它会调用VideoPage *page = [[VideoPage alloc] initWithVideoId:[indexPath row]],然后将该视图控制器推送到视图堆栈。然后,此页面开始下载,然后是进度视图。

现在,如果用户按下导航控制器并返回视频列表然后再次选择SAME行,它将初始化此页面的新版本,这意味着页面的init不断更新UIProgressView永远丢失。

这有什么办法吗?如果问题含糊不清,我很抱歉。基本上如果我已经使用videoId = 3初始化了一个视图控制器,那么我不想再启动另一个,我想再次推送当前的一个,这样UIProgressView仍然显示。

感谢你给我的任何帮助。 :)

2 个答案:

答案 0 :(得分:1)

您可以保留对视图控制器的引用并将它们存储在由行索引或某些内容键入的字典中,然后无论何时单击该行,您都可以检查字典中是否存在该键,如果存在,那么您只需获取堆栈中的值和repush,如果它不存在则创建它并将其添加到字典中并将其推送到堆栈...

看完你的评论后,听起来你需要有一些下载管理器类来处理你在后台的下载...我的建议是制作一些管理下载的单例类,这个类应该保持状态用户启动的每个电影下载,当它重新创建视图控制器时,您应该与管理员核实是否已经启动某个下载,如果有,则使用下载管理器中的数据来放置您的视图控制器处于预期状态......

答案 1 :(得分:0)

在推新视频控制器之前,检查你的viewController(被推动者)是否为零。

if (viewController == nil) LoginViewController *viewController = [[LoginViewController alloc] initWithNibName:@"LoginView" bundle:nil];

[self.navigationController pushViewController:viewController animated:YES];        [viewController release];