gpt4 book ai didi

ios - Swift 5 - 通过 UIAlertView 在文本字段中进行验证

转载 作者:行者123 更新时间:2023-11-29 05:22:59 27 4
gpt4 key购买 nike

所以我正在使用 Swift 5 并处理核心数据。我正在尝试通过 UIAlertView 添加验证到文本字段。

澄清我的代码已经做了什么:

  • 用户按下按钮,iOS 照片库界面会弹出。
  • 选择照片后,UIAlertView会弹出,要求我在两个文本字段中输入两个文本。
  • 完成后,数据将提交到数据库并显示我在 TableViewCell 上输入的图像和文本

问题?

提交空白文本字段时,不会提示用户输入文本。它只会在 UITableViewCell 中显示图像,而不显示任何文本,这是不输入字符串时的明显结果。

我想实现什么目标?

在用户未输入任何文本时向其添加验证消息并取消提交到数据库的过程。

我已经尝试过什么?

请参阅下面的代码。注意:向数据库提交图像和文本已经可以了,我的问题是文本字段验证

func createBrandItem (with image:UIImage){
let brandItem = Brand(context: managedObjectContext)
brandItem.image = NSData(data: image.jpegData(compressionQuality: 0.3)!) as Data

let inputAlert = UIAlertController(title: "New Brand", message: "Enter an item and a brand.", preferredStyle: .alert)
inputAlert.addTextField { (textfield:UITextField) in
textfield.placeholder = "Item"
}
inputAlert.addTextField { (textfield:UITextField) in
textfield.placeholder = "Brand"
}

inputAlert.addAction(UIAlertAction(title: "Save", style: .default, handler: { (action:UIAlertAction) in

let itemTextField = inputAlert.textFields?.first
let productTextField = inputAlert.textFields?.last

if (itemTextField?.text!.isEmpty)! || (productTextField?.text!.isEmpty)! {

let alertBlankInput = UIAlertController(title: "Blank Input", message: "Please don't leave the textfields empty.", preferredStyle: .alert)

let okAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.cancel)

alertBlankInput.addAction(okAction)

self.present(alertBlankInput, animated: true, completion: nil)
}

if itemTextField?.text != "" && productTextField?.text != "" {
brandItem.item = itemTextField?.text
brandItem.brand = productTextField?.text

do{
try self.managedObjectContext.save()
self.loadData()
}
catch{
print("Could not save data \(error.localizedDescription)")
}
}
}))

inputAlert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))

if self.presentedViewController == nil {
self.present(inputAlert, animated: true, completion: nil)
}
else {
self.dismiss(animated: false, completion: nil)
self.present(inputAlert, animated: true, completion: nil)
}
}

分解代码

下面的代码片段是我尝试添加到 createBrandItem 函数中的代码。当我在调试应用程序时添加此 if 语句时,它会使用此条件语句,但也会完成添加到数据库的条件语句。

if (itemTextField?.text!.isEmpty)! || (productTextField?.text!.isEmpty)! {

let alertBlankInput = UIAlertController(title: "Blank Input", message: "Please don't leave the textfields empty.", preferredStyle: .alert)

let okAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.cancel)

alertBlankInput.addAction(okAction)

self.present(alertBlankInput, animated: true, completion: nil)
}

下面的代码是将数据添加到数据库的代码片段。

let brandItem = Brand(context: managedObjectContext)
brandItem.image = NSData(data: image.jpegData(compressionQuality: 0.3)!) as Data

if itemTextField?.text != "" && productTextField?.text != "" {
brandItem.item = itemTextField?.text
brandItem.brand = productTextField?.text

do{
try self.managedObjectContext.save()
self.loadData()
}
catch{
print("Could not save data \(error.localizedDescription)")
}
}

总结

如果文本字段为空并停止提交到数据库的过程,我该怎么办?

最佳答案

我建议创建您自己的 subview Controller ,将其呈现为模型对话,这会更优雅,并且可以让您更好地控制流程。但是,如果您想继续使用警报 Controller ,您可以通过在禁用状态下创建“确定”操作来使其工作:

let okAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.cancel)
okActions.isEnabled = false
inputAlert.addAction(okAction)

然后使用textFields的委托(delegate)来验证文本字段的内容(您需要有一种方法来协调两个文本字段 - 您可以使用alertController的textfields?数组来交叉-检查,或使用局部变量作为标志),当您对两者的内容感到满意时

inputAlert.actions.filter({$0.title == "OK"  }).first?.isEnabled = true

关于ios - Swift 5 - 通过 UIAlertView 在文本字段中进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58480808/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com