将 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 类添加到导航堆栈的主要内容,如果未能解决你的问题,请参考以下文章