【问题标题】:Keep UI data when navigating between views在视图之间导航时保​​留 UI 数据
【发布时间】:2014-08-25 08:35:21
【问题描述】:

在我的测试项目中,我在导航控制器中嵌入了一个 ViewController 和一个 TableViewController 控制器。 ViewController 是主视图,用户可以导航到 TableViewController,然后返回 ViewController。

当我从 ViewContoller>TableViewController 去时,我正在使用“推送”segue,当用户希望返回到 ViewController 时,TableViewController 会使用[self dismissViewControllerAnimated:YES completion:nil]; 关闭。

在 ViewController 中,我有一个按钮可以更改标签上的文本:

-(IBAction)onButtonPress:(id)sender {
      _myLabel.text = @"New Label Text";
}

当导航到 TableView,然后返回 ViewController,_myLabel.text 中的更改已丢失,原始文本已恢复。在视图之间导航时确保保留 UI 数据的最佳方法是什么?在这个项目中我可能只有一个标签,但在某些时候我会有很多 UI 元素,例如,当用户离开然后返回时需要保持页面加载的 WebView。

您认为最好的实现方法是什么?

感谢您的宝贵时间。

【问题讨论】:

  • 使用块或委托和协议。
  • 但是一旦 UI 加载,它的状态就永远不会改变,直到你改变它们。如果我错了,那么任何人都可以纠正它。
  • 正如@Prince 所说是正确的,如果 Viewcontrolelr 是 rootViewController(TableVC 是孩子或呈现为不同的)但根 ViewController 的数据应该保留。
  • 您可能在 ViewDidLoad 或 DidAppear 被处理,检查一下。
  • 导航控制器是否有可能成为根而不是视图控制器?我刚刚又做了一个测试项目,和上面完全一样,只是我没有使用导航控制器,并且在导航到第二个视图时使用了“模态”设置。这一次,数据在导航后保留在标签中(效果很好)。

标签: ios objective-c iphone xcode uiviewcontroller


【解决方案1】:

首先,View 是你的数据表示,任何数据都是你的 Model。因此,您可以存储 Model 及其实体和值。您的控制器管理数据以在 View 上表示它或根据用户在 View 中的操作更改模型。

所以添加一些模型对象来存储_myLabel.text。并将此对象用于您应用中的两个控制器。

【讨论】:

    【解决方案2】:

    尝试从ViewWillAppearViewDidAppear方法中删除设置文本,放入ViewDidLoad

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 2012-02-07
      • 2017-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多