在 Swift 5.3 中仅更新存储在 userData 中的两个 UITextField 之一

Posted

技术标签:

【中文标题】在 Swift 5.3 中仅更新存储在 userData 中的两个 UITextField 之一【英文标题】:Update only one of two UITextFields stored in userData in Swift 5.3 【发布时间】:2021-02-02 04:45:42 【问题描述】:

使用 UserDefaults 存储两个用户输入字段,以便在各种 VC 中使用。 UILabel 显示当前设置,而 UITextFields 接受更新的输入。我可以设置、存储、显示和更新这两个字段,但更新必须同步进行。我无法找出仅更新两个字段之一的正确方法。例如,仅更新电子邮件,在我的情况下不触摸“evernote”。如果没有以下解决方法,并且仅输入两个字段之一时,第二个非输入字段将被覆盖为空白。

作为一种解决方法,我将保存的数据作为两个 UITextField 的初始输入。代码有效,只是似乎不是最佳的。理想情况下,两个 UITextField 不会有初始值。我在按钮功能中使用了 != null 语句,但无济于事。

任何建议都将不胜感激,并在此先感谢您。

在 VC 之间共享 userData 输入的类:

类 UDM

static let shared = UDM()
let userData = UserDefaults(suiteName: "xxxx.saved.data")!

出口和行动:

@IBOutlet weak var emailLabel: UILabel!
@IBOutlet weak var evernoteLabel: UILabel!

@IBOutlet weak var enterEmail: UITextField?
@IBOutlet weak var enterEvernote: UITextField?

@IBAction func saveButton(_ sender: UIButton) 
    UDM.shared.userData.set(enterEmail?.text, forKey: "email")
    UDM.shared.userData.set(enterEvernote?.text, forKey: "evernote")

viewDidLoad 界面:

    let emailObject = UDM.shared.userData.object(forKey: "email")
    if let email = emailObject as? String 
        enterEmail?.text = email
        emailLabel.text = email
    
    
    let evernoteObject = UDM.shared.userData.object(forKey: "evernote")
    if let evernote = evernoteObject as? String 
        enterEvernote?.text = evernote
        evernoteLabel.text = evernote
    

【问题讨论】:

【参考方案1】:

发帖以防其他人像我一样愚蠢。在 UITextFields 的 if/then 语句中,我将 enterEmail 或 enterEvernote 视为字段。一旦我意识到您需要查看字段中的 .text,一切就都到位了。那么更新的操作就很简单了:

@IBAction func saveButton(_ sender: UIButton) 
    if enterEmail?.text != "" 
        UDM.shared.userData.set(enterEmail?.text, forKey: "email")
    
    if enterEvernote?.text != "" 
        UDM.shared.userData.set(enterEvernote?.text, forKey: "evernote")
    

【讨论】:

以上是关于在 Swift 5.3 中仅更新存储在 userData 中的两个 UITextField 之一的主要内容,如果未能解决你的问题,请参考以下文章

如何在 DACPAC 部署中仅部署一组选定的存储过程?

UiAlertView 或 UiAlertController 在 Swift 中仅显示一次

在 AVCapture Swift 中仅捕获相机预览

在 Swift 中仅平滑顶部角度和图像视图

在swift中仅使用来自firebase的值返回一个键

如何在swift中仅向UIVIEW的顶部和底部添加阴影