将 2 个或更多 UIViewController 类添加到导航堆栈

Posted

技术标签:

【中文标题】将 2 个或更多 UIViewController 类添加到导航堆栈【英文标题】:Add 2 or more UIViewController class to a Navigation Stack 【发布时间】:2014-07-23 12:23:43 【问题描述】:

我有一个可重用的 UIViewController 类,其中有一个 tableview,比如 Class T。我有一个要显示的内容列表。

现在,当我按下其中一个单元格时,我会创建此类的新实例(alloc init)并将其推送到导航堆栈并在同一类 T 中显示新数据。

当我弹出控制器时,问题就出现了

我在 T 类中使用 XIB,而不是故事板和转场。

请帮我解决这个问题。

谢谢,

[编辑-I] 初始化

T *controller = [T alloc] initWithNibName:@"T" bundle:nil];
[self.navigationController pushViewController:controller animation:YES];

【问题讨论】:

你能展示一下初始化第一类和第二类的代码吗? 两个表视图是否使用相同的数据源? 不是同一个数据源。它来自服务器事实。是的,但是如果我引用它,它就会起作用,否则它将不起作用。 你能显示 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 函数的代码 我认为您在 tableview 中显示数据的来源具有您在第二个视图中获得的最新值。这就是为什么它也在第一个视图中显示相同的数据。您是否使用一些全局数据模型来保存您的应用数据? 【参考方案1】:

您的问题显然是基于表视图的datasource 中使用的数据缺少更新。我建议每个控制器都有自己的对象、数组或获取的结果控制器。然后你可以这样做:

T *controller = [T alloc] initWithNibName:@"T" bundle:nil];
controller.dataArray = ... // populate the data source

或者,使用相同的datasource,您必须确保检查应该显示的内容。也许你可以给你的表格视图控制器类一个type 属性,在显示数据单元格时会被检查。

if (self.type == HierarchyFirstLevel) 
   cell.textLabel.text = ... // populate for first level

else if (self.type == HierarchySecondLevel) 
   cell.textLabel.text = ... // something else

// etc.

【讨论】:

我不明白。如果我正在创建该类的全新实例,我相信这不应该发生。是不是类对象都是新的,但它不会创建 xib 的实例? 类实例与数据源是分开的。如果您使用相同的“数据源”(例如,单例)来通知您的实例的 datasource,则哪个实例显示它变得无关紧要。

以上是关于将 2 个或更多 UIViewController 类添加到导航堆栈的主要内容,如果未能解决你的问题,请参考以下文章

将 2 个或更多异步 HTTP 调用的结果设置为命名变量

如何接收 2 个或更多不同的异常?

ionic 2,刷新带有 2 个或更多徽标的模态页面

为啥我需要 2 个或更多 Core Data 模型?

在并行运行 2 个或更多任务时保留变量值

如何使用 sklearn 将数据拆分为 3 个或更多部分