【问题标题】:How to save a uitextfield so the text remains from view controller to view controller如何保存 uitextfield 以便文本从视图控制器保留到视图控制器
【发布时间】:2017-04-23 01:42:57
【问题描述】:

我的文本现在将文本字段保存在 uiviewcontroller 中,但是当转到前一个视图控制器而不是返回原始视图控制器时,文本被删除。如何保存文本,以便在输入文本并保存文本时保留它们。

import UIKit

class tryingViewController: UIViewController {

    @IBOutlet weak var textext: UITextField!

    @IBAction func actionaction(_ sender: Any) {
        textext.resignFirstResponder()
        let myText = textext.text
        UserDefaults.standard.set(myText, forKey: "myKey")
    }
}

【问题讨论】:

    标签: ios swift save uitextfield swift3


    【解决方案1】:

    您可以使用多种选项。

    1. 使用 CoreData
    2. 在主视图控制器中保存文本
    3. 存储在UserDefaults

    鉴于您已经在使用UserDefaults,我将继续使用它并展示一个示例:

    @IBOutlet weak var textField: UITextField!
    
    let standardText = "standardText"
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        textField.addTarget(self, action: #selector(textDidChange), for: .editingChanged)
        textField.text = UserDefaults.standard.value(forKey: standardText) as? String
    }
    
    func textDidChange(sender: UITextField) {
        UserDefaults.standard.set(sender.text ?? "", forKey: standardText)
    }
    

    【讨论】:

    • 关于使用 UserDefaults 存储敏感信息的注意事项。 andyibanez.com/nsuserdefaults-not-for-sensitive-data
    • 好点,以防 OP 想要存储敏感数据。我只是创建了这个例子,纯粹是因为 OP 已经在使用它,我不知道他想用它做什么:)。
    【解决方案2】:

    你正在设置默认值,但你没有读回它:

    if let string = UserDefaults.standard.object(forKey: "myKey") as? String {
         textext.text = string
    }
    

    或者正如所指出的,因为文本字段文本是可选的:

    textext.text = UserDefaults.standard.object(forKey: "myKey") as? String
    

    【讨论】:

    • 您甚至不需要检查默认值中是否有字符串,因为文本字段的默认文本值为空。就做textfield.text = UserDefaults.standard.object(forKey: "myKey") as? String
    • @ozgur 在这种情况下,您是正确的,因为text 是可选的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多