2009-12-31 20 views
2

我创建了一个UITableViewController子类。我只需要一个控制器?我只是实例化这个子类的多个实例吗?如何在iPhone钻取应用程序中处理无限量的TableViews

我正在构建的iPhone应用程序将以一张人员列表开始。如果用户点击一个人,一张新表将被推入他们工作的公司列表。如果用户点击一个公司,他们会看到一份工作职位列表。如果他们挖掘一个职位,他们会看到持有这些职位的人员名单。 这可以永远持续下去,用户可以随时备份列表。

应用程序委托实例化导航控制器和表视图控制器,然后将其推送到导航控制器上。但是当用户点击一行时,现在TVC正在创建另一个TVC。

  1. 那是正确的还是应该 AppDelegate中被实例化所有 TVC的?或者它是否自 起作用?它们都被推入Nav 控制器吗?

  2. 是否每个表视图实例 需要有不同的名称,也可以 他们都被称为“mainTVC”或 类似的东西?

    tableViewController *mainTVC = [[tableViewController alloc] init]; 
    
  3. 我不会耗尽内存吗?我是否需要 下降表视图 当他们从 当前2或3级别,然后重新创建它,如果 用户备份到它?

回答

1

我会为每种类型创建一个视图控制器。据推测,你会希望有一个特殊的显示特性,如自定义的tableview单元显示工作位置略有不同,那么你会得到人的名字。

除此之外,@Ben Gottlieb的答案应该工作得很好。使用大量的视图控制器并处理didReceiveMemoryWarning:方法。

还有一件事,如果用户向下钻取以至于你想说他们永远不会回头(有点像撤销堆栈),那么可以使用setViewControllers:animated:UINavigationController方法将堆栈重置为一定的大小(比如15来实现15的“撤消缓冲区”)。使用这种方法,您可以确保第一个视图控制器始终是您的根视图控制器,其余的都是向下钻取实例。

3

无需创建多个TableView,我过去所做的只是重新绑定到不同的数据源。因此,保持一个TableView,并为人们,然后公司等数据源...

+0

谢谢。但是,我可以做到这一点,仍然动画 - 从右侧滑入新数据? – Andrew 2009-12-31 04:16:28

+0

你可以做的只是从一个tableView开始。当用户导航到一个新的数据源时,只需替换表的数据源 - 但是,而不是用[myTableView reloadData]重新加载,使用(对于每个部分): [aTableView reloadSections:[NSIndexSet indexSetWithIndex:0/* * ] withRowAnimation:UITableViewRowAnimationRight]; – pop850 2010-07-19 21:45:40

1

选项号码(2)看起来不错。在内存成为问题之前,您可以将相当多的视图控制器推入堆栈。系统将清除didReceiveMemoryWarning:方法中的大部分重量级内存(即视图)。如果你正在创建大量的内存结构,你可能需要在那个方法中清理它们(一定要调用继承的方法)。

1

要回答你的第三个问题,只要你在内存中没有庞大的数据存储,内存不应该是一个问题。你不应该在任何情况下“放弃”tableview - 这会导致崩溃(无论如何,无法对导航堆栈进行非FILO添加/移除)。在内存压力下,你应该只释放像缓存这样的“不重要”项目。但是,这不应该是一个问题。

此外,如果您的级别超过3个左右,则可能需要重新考虑您的用户界面。如果用户正在向下钻取10个等级,那么导航堆栈将非常繁琐。

相关问题