ios - 在 Swift 5.3 中仅更新存储在 userData 中的两个 UITextField 之一
问题描述
使用 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
}
解决方案
发帖以防其他人像我一样愚蠢。在 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")
}
}
推荐阅读
- angularjs - 用户选择后的 API 调用
- scala - Scala 将 Array[String] 的列连接成单个 Array[String]
- encryption - 使用带加密的 HSQLDB
- swift - 使用网络调用写入时,键值对在 swift 4 中自动删除
- angular - Angular - 从父组件到子组件的确认事件
- android - 在 iOS 中打开和隐藏键盘时管理屏幕显示和底部按钮,与 Android 相同
- c# - 将字符串转换为双精度锯齿数组
- c# - 如何从主窗体按钮单击事件中的 n 个用户控件 datagridview 中获取同一列的值
- android - 如何在 RecyclerView 的 Item 的 ImageView 中显示默认图片?
- powerbi - PowerBI 可以加载和显示产品图片吗?