仅当文本字段为空时如何显示图像?

Posted

技术标签:

【中文标题】仅当文本字段为空时如何显示图像?【英文标题】:How to show image when textfield is empty only? 【发布时间】:2017-04-19 21:02:36 【问题描述】:

我有 4 个文本字段,一个按钮和一个图像,我想要实现的是,当按下按钮时,它应该警告用户有空文本字段并显示指向空文本字段的图像,但是当用户将文本放入空文本字段时,使图像消失。谢谢

这是我的功能

func checkFields()
    let userEmail = user_EmailTxtField.text!
    let userPassword = user_PassTxtField.text!
    let passwordConfirm = pass_ConfirmTxtField.text!
    let userPhone = user_PhoneTxtField.text!
    //Set backArrow image to show input error to password
    let imageName = "backArrow.png"
    let image = UIImage(named: imageName)
    let passImageView1 = UIImageView(image: image!)
    passImageView1.frame = CGRect(x: 319, y: 331, width: 49, height: 49)
    view.addSubview(passImageView1)
    //Show Arrow image to password confirm error
    let passConfirmImageView1 = UIImageView(image: image!)
    passConfirmImageView1.frame = CGRect(x: 319, y: 394, width: 49, height: 49)
    view.addSubview(passConfirmImageView1)
    //Show arrow Image to email error
    let emailImageView1 = UIImageView(image: image!)
    emailImageView1.frame = CGRect(x: 319, y: 270, width: 49, height: 49)
    view.addSubview(emailImageView1)
    //Set image to phonetxt field error
    let phoneImageView1 = UIImageView(image: image!)
    phoneImageView1.frame = CGRect(x: 319, y: 209, width: 49, height: 49)
    view.addSubview(phoneImageView1)
    if userPhone.isEmpty 
        phoneImageView1.isHidden = false
     else 
        phoneImageView1.isHidden = true
    
    if userEmail.isEmpty 
        emailImageView1.isHidden = false
    
    if userPassword.isEmpty 
        passImageView1.isHidden = false
    
    if passwordConfirm.isEmpty 
        passConfirmImageView1.isHidden = false
    

【问题讨论】:

【参考方案1】:

您可以调用一个函数来处理您的检查,然后在文本不为空时隐藏您的图像,如下所示:

1 在您为事件.editingChanged 创建目标的位置向您的文本字段添加目标:

user_EmailTxtField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
user_PhoneTxtField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
pass_ConfirmTxtField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
pass_ConfirmTxtField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)

2设置用于检查文本字段是否被编辑的方法:

func textFieldDidChange() 
  emailImageView1.isHidden = user_EmailTxtField.hasText
  phoneImageView1.isHidden = user_PhoneTxtField.hasText
  passImageView1.isHidden = pass_ConfirmTxtField.hasText
  passConfirmImageView1.isHidden = pass_ConfirmTxtField.hasText

因此,如果您将此示例应用于所有文本字段,则不需要在 checkFields() 中进行检查,您可以将方法重命名为 setupTextFields(),例如仅将其用作文本字段的创建

在类的所有方法中使用您的图像视图的示例,但请确保在 viewDidLoad() 中进行初始化,例如,以避免在展开可选值时发现 nil 错误

class YourClass: UIViewController 

  // ImageView Reference
  var emailImageView1: UIImageView!

  // then your checkFields method
  func checkFields() 
    // code before
    emailImageView1 = UIImageView(image: image!)
    // code after
  

【讨论】:

我已经尝试过了,但它给了我一个错误提示“无法在 textInput.isempty 行上调用非函数类型 'bool' 的值 你能检查一下你是否使用了我最新更新的答案。更新了很多 @SCS 你可以检查你的if !user_EmailTxtField.hasText 是否更好emailImageView1.isHidden = user_EmailTxtField.hasText 好的,您需要为您显示和隐藏的图像视图创建引用。例如 var emailImageView1: UIImageView! 在您的 checkFields() 方法之外以在 textFieldDidChange() 方法中访问它,然后您像 emailImageView1 = UIImageView(image: image!) 一样在没有 let 关键字的情况下对其进行初始化 更新了我的答案@SCS【参考方案2】:

你应该分开创建图像(addSubview)和检查

把创作放到viewDidLoad

然后检查字段并将其隐藏或显示。

刚才您每次创建一个新图像,该图像放置在先前创建的图像上(如果您切换到线框 3d 调试视图,您可以检查这一点)

【讨论】:

【参考方案3】:

您应该尝试检查if userPhone.isEmpty,而不是:

if user_EmailTxtField.text == nil 
    phoneImageView1.isHidden = false

你甚至可以这样做:

if user_EmailTxtField.text == nil || user_EmailTxtField.text == "" 
        phoneImageView1.isHidden = false

【讨论】:

以上是关于仅当文本字段为空时如何显示图像?的主要内容,如果未能解决你的问题,请参考以下文章

当字段为空时,如何让内容类型中的链接字段显示默认文本

SwiftUI:仅当输入不为空时才启用保存按钮

仅当字段不为空时才进行电子邮件验证

仅当特定输入为空时,如何禁用按钮?

仅当搜索栏文本不为空时,如何运行过滤器功能?

仅当搜索框不为空时才显示项目匹配内容