【问题标题】:UINavigationController Push Load View Each TimeUINavigationController 每次推送加载视图
【发布时间】:2016-09-05 11:40:04
【问题描述】:

我有 UINavigationController,它的根视图是 UICollectionViewController,每次我点击此 UICollectionViewController 中的单元格时,都会推送另一个 UICollectionViewController 具有 UITextFiled 问题是当我返回根目录并点击同一个单元格时,它将推送 WHOLE NEW 视图,并且 UITextField 为空。

我想要的东西类似于 whatsapp 或其他聊天应用程序,当打开聊天对话并输入内容并返回相同的聊天对话时 UITextField 将包含我写的文本。

编辑: 这是我用来推送控制器的代码:

    let nextView = self.storyboard!.instantiateViewControllerWithIdentifier("nextView") as! nextViewController
    self.navigationController!.pushViewController(nextView, animated: true)

我可以阻止 UINavigationController 弹出视图并保持加载吗?

【问题讨论】:

  • 您基本上是在描述正常的导航控制器行为。一旦视图从堆栈中弹出,内存就会重新分配,视图就完全消失了。如果您想在再次点击时恢复数据,您需要设计一种方法将此数据传递到新的视图控制器。要获得更好的答案,请尝试添加一些代码来显示您如何初始化视图以及您需要完成什么。否则你的问题可能太模糊而无法得到任何好的答案。
  • 您需要在推送视图控制器中以及在弹出呼叫委托之前实现协议或通知
  • 我已经更新了我的问题,我可以阻止 UINavigationController 弹出视图并保持加载吗?

标签: ios swift uinavigationcontroller uicollectionview savestate


【解决方案1】:

使用本地数据库保存未保存的数据。在聊天视图出现时,检查该特定用户是否存在任何未保存的数据,如果是,则将其添加到文本框中。

【讨论】:

    【解决方案2】:

    这是UINavigationController 的默认或正常行为。当您弹出任何ViewController 时,它将从导航堆栈中删除,而您的ViewController deallocate 从内存中删除。

    因此,如果您想实现如您所提到的那样保留文本字段的文本,那么您应该将其存储在某个地方。您可以存储在NSUserDefaults 和相同的密钥。然后每次检查viewDidload,如果有文本则显示到文本字段,每个viewDidDisappear 再次设置userdefault,如果文本字段为空,则设置空字符串。

    第二件事,您可以使用委托和协议将数据发送回上一个类,然后再次将其发送到该类或 VC 并显示它!!

    你可以用这种解决方案来管理这些东西!

    【讨论】:

      【解决方案3】:

      将数据从第二个视图传递到第一个视图的用户协议。以下链接将为您提供帮助,并且使用协议,您可以传递值并按照您的定义显示。

      照做

      override func viewWillDisappear(animated: Bool) {
          super.viewWillDisappear(animated)
          if self.isBeingDismissed() {
              self.delegate?.acceptData(textFieldOutlet.text)
          }
      }
      

      https://www.codebeaulieu.com/36/Passing-data-with-the-protocol-delegate-pattern

      这种委托是将值从第二个控制器传递到第一个控制器的正确方法。

      还有一件事,您必须重新考虑您的视图控制器 建筑学。一种聊天应该多好,你是 制作。

      谢谢。

      【讨论】:

      • 感谢您的回答,但有没有办法让视图保持加载状态?
      • 您也可以使用数据库并重新获取数据。好好想想吧。 @HaidarMahmoud
      • 不,你不能让它保持加载,一旦你弹出,视图控制器就会失去一切,你将不得不将数据存储在某个地方,例如:userdefault、plist、core-data 或 Sqlite。
      猜你喜欢
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 1970-01-01
      相关资源
      最近更新 更多