如何在没有按钮操作的情况下使用 userdefualts 保存文本字段(swift3)
Posted
技术标签:
【中文标题】如何在没有按钮操作的情况下使用 userdefualts 保存文本字段(swift3)【英文标题】:How to use userdefualts to save a textfield without a button action (swift3) 【发布时间】:2017-03-15 00:53:50 【问题描述】:我想使用 userdefulats,这样当用户从视图控制器 a 转到 b 再回到 a 时,文本仍然存在。但是,我想在不让用户点击按钮来保存 textview 文本的情况下执行此操作。
import UIKit
class ViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
override func viewWillDisappear(_ animated: Bool)
optional func textViewDidChange(_ textView: UITextView)
【问题讨论】:
textViewDidChange 不属于 viewWillDisappear。 @J.ren 的回答展示了如何做到这一点 【参考方案1】:试试这个:
import UIKit
import Foundation
class ViewControllerA: UIViewController, UITextViewDelegate
var textView: UITextView?
let textKey = "textKey"
//When view will appear, we should read text we have stored, then display text in textview
override func viewWillAppear(_ animated: Bool)
//We may get nil from UserDefaults
let storedText = UserDefaults.standard.object(forKey: textKey) as? String ?? ""
self.textView?.text = storedText
override func viewWillDisappear(_ animated: Bool)
UserDefaults.standard.setValue(self.textView?.text, forKey: textKey)
UserDefaults.standard.synchronize()
override func viewDidLoad()
super.viewDidLoad()
//Do textView create here
//If u create UITextView by IB, u also can finish next work in IB.
self.textView = UITextView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
self.textView?.delegate = self
self.view.addSubview(self.textView!)
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
//Here we save text in textView everytime we edit textview, but we can delay saving until viewWillDisappear
// func textViewDidChange(_ textView: UITextView)
// UserDefaults.standard.setValue(textView.text, forKey: "text")
// UserDefaults.standard.synchronize()
//
【讨论】:
你在说什么 //do textView create here.【参考方案2】:你可以在他们点击下一步按钮时保存
节省viewWillDisappear
您可以在每次文本更改时保存。在你的VC中实现UITextViewDelegate
,然后编写这个函数:
optional func textViewDidChange(_ textView: UITextView)
文档:https://developer.apple.com/reference/uikit/uitextviewdelegate
【讨论】:
我根据您的建议编辑了我的问题,但没有奏效。【参考方案3】:class ViewController: UIViewController, UITextViewDelegate
@IBOutlet weak var txtView: UITextView!
override func viewWillAppear(_ animated: Bool)
let myData = UserDefaults.standard.object(forKey: "myData") as? String ?? ""
self.txtView?.text = myData
//MARK: - TextView Delegate -
func textViewDidChange(_ textView: UITextView)
UserDefaults.standard.setValue(self.txtView?.text, forKey: "myData")
UserDefaults.standard.synchronize()
如果您想在不单击按钮的情况下保存 textView 的文本,则必须将其保存在 textViewDidChange 委托方法中。当您导航到下一个控制器时,将调用 viewWillDisappear。
【讨论】:
以上是关于如何在没有按钮操作的情况下使用 userdefualts 保存文本字段(swift3)的主要内容,如果未能解决你的问题,请参考以下文章
如何在此扩展程序中创建一个按钮,在不使用操作按钮的情况下在主应用程序中打开特定视图?
如何使用 JavaScript 在没有提交按钮的情况下提交“文件”输入?
如何在不使用 redux 中间件的情况下禁用/隐藏自适应卡片/操作按钮?