【问题标题】:Add 2 or more UIViewController class to a Navigation Stack将 2 个或更多 UIViewController 类添加到导航堆栈
【发布时间】: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 中显示数据的来源具有您在第二个视图中获得的最新值。这就是为什么它也在第一个视图中显示相同的数据。您是否使用一些全局数据模型来保存您的应用数据?

标签: ios iphone objective-c uiviewcontroller uinavigationcontroller


【解决方案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,则哪个实例显示它变得无关紧要。
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多