我有 UINavigationController ,它的根视图是 UICollectionViewController ,每次点击此 UICollectionViewController 中的单元格时,会推送另一个 UICollectionViewController < / strong>有 UITextFiled 问题是,当我回到根并点击相同的单元格时,它将推送全新视图, UITextField 为空。
我想要的东西类似于whatsapp或其他聊天应用,当打开聊天对话并输入内容并返回相同的聊天对话时 UITextField将包含我写过的文本。
修改 这是我用来推动控制器的代码:
let nextView = self.storyboard!.instantiateViewControllerWithIdentifier("nextView") as! nextViewController
self.navigationController!.pushViewController(nextView, animated: true)
我可以阻止UINavigationController弹出视图并保持加载吗?
答案 0 :(得分:1)
用于将数据从第二个视图传递到第一个视图的用户协议。以下链接将帮助您,并使用协议,您可以传递值并显示为您定义的。
做为
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
此委派是将值从第二个控制器传递到第一个控制器的正确方法。
还有一件事,你必须重新考虑你的视图控制器 建筑。对于某种聊天,你应该如何才能做到最好 制造
感谢。
答案 1 :(得分:0)
使用本地数据库保存未保存的数据。在聊天视图上显示视图时,检查是否为该特定用户提供了任何未保存的数据,如果是这种情况,则将其添加到文本框中。
答案 2 :(得分:0)
这是UINavigationController
的默认或正常行为。当您弹出任何ViewController
时,它会从导航堆栈中移除,并从内存中移除ViewController
deallocate
。
所以,如果你想要实现如你所提到的那样保留textfield的文本,那么你应该将它存储在某个地方。您可以存储在NSUserDefaults
和相同的密钥中。然后每次检查viewDidload
是否有文本然后显示到文本字段,每个viewDidDisappear
再次使用新编辑设置userdefault
,如果textfield为空,则设置为空字符串。
您可以使用委托和协议将数据发送回上一个类并再次将其发送到该类或VC并显示!!
你可以通过这种解决方案管理这些东西!