繁体   English   中英

检查填充的文本字段和 textview 无法正常工作 (UIKit)

[英]Checking for filled text field & textview isn't working properly (UIKit)

我有一个带有文本字段、图像和 textview 的表单。只有当所有内容都已填写时,用户才能按下“发布”按钮,为了验证它,我检查图像是否为空,文本字段是否为空以及 textview 是否为空的。 问题是,它无法正常工作,即使某些文本字段为空,按钮也会启用。

这是我的验证码:

 @objc public func validatePost() {
    for ingredient in ingredients {
        guard
            let _ = ingredient.name,
            let _ = ingredient.amount
        else {
            postButton.isEnabled = false
            return
        }
    }
    guard
        let title = titleField.text, !title.trimmingCharacters(in: .whitespaces).isEmpty,
        let category = categoryField.text, !category.trimmingCharacters(in: .whitespaces).isEmpty,
        let _ = postImage.image,
        let desc = descriptionField.text, !desc.trimmingCharacters(in: .whitespaces).isEmpty, !desc.trimmingCharacters(in: .newlines).isEmpty
    else {
        postButton.isEnabled = false
        return
    }
    postButton.isEnabled = true
}

当我的文本字段发生变化时、当用户选择图像时以及当 textview 发生变化时,我会调用此选择器。

文本域:

   private lazy var ingredientNameField:UITextField = {
    let textField =  UITextField()
    ...
    textField.addTarget(CreateFormViewController(), action: #selector(CreateFormViewController.validatePost), for: .editingChanged)
    ...
    return textField
}()

 private lazy var ingredientAmountField:UITextField = {
        let textField =  UITextField()
        ...
        textField.addTarget(CreateFormViewController(), action: #selector(CreateFormViewController.validatePost), for: .editingChanged)
       ...
        return textField
    }()

Textview:

func textViewDidChange(_ textView: UITextView) {
    validatePost()
}

图片:

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    
    picker.dismiss(animated: true)
    
    guard let image = info[.editedImage] as? UIImage else {
        print("No image found")
        return
    }
    
    postImage.isHidden = false
    postImage.image = image
    validatePost()

}

func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!){
    self.dismiss(animated: true, completion:nil)
    
    guard let image = image else {return}
    
    postImage.isHidden = false
    postImage.image = image
    validatePost()

}

当我在 textview 中写一些东西时也会发生该错误,它显示按钮已启用,然后我删除 textview 中的所有内容,它仍然显示按钮已启用。

我的验证不正确吗? 谢谢。

好吧,过了一会儿,我设法解决了这个问题,它发生的原因是因为我认为我的文本是 nil 而它实际上只是一个空字符串。 因此,在添加额外的验证以确保也检查空案例之后,我设法让它工作得很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM