在我正在开发的应用程序中,有一个电子邮件地址和密码UITextField。

我试图设置条件,以便当按下SignIn按钮时,如果其中一个或两个都为空(“”),则占位符文本应为红色,以突出显示给用户以完成它们。

我对iOS开发(或一般而言的开发)非常陌生,因此我的逻辑思维可能是错误的。
无论如何,这是我写的并开始于:

       @IBAction func signInTapped(_ sender: Any) {

    if emailField.text == "" {
          emailField.attributedPlaceholder = NSAttributedString(string: "Email address", attributes: [NSForegroundColorAttributeName: UIColor.red])

        if pwdField.text == "" {
            pwdField.attributedPlaceholder = NSAttributedString(string: "Password", attributes: [NSForegroundColorAttributeName: UIColor.red])
        }
    }else {


在以下情况下,此方法非常适用:-两个字段均为空-电子邮件地址为空,密码字段为空但是,如果电子邮件地址字段为空而密码字段为空,则密码字段占位符文本不会更改。

我很想知道我要去哪里错了,或者是否有更简单/合乎逻辑的方法来获得结果。

最佳答案

我不喜欢swift使用{}的方式,因此在示例中,我向他们展示了不同之处。

您的代码具有不同的缩进:

@IBAction func signInTapped(_ sender: Any)
{
    if emailField.text == ""
    {
        emailField.attributedPlaceholder = NSAttributedString(string: "Email
            address", attributes: [NSForegroundColorAttributeName:
            UIColor.red])

        if pwdField.text == ""
        {
            pwdField.attributedPlaceholder = NSAttributedString(string:
                "Password", attributes: [NSForegroundColorAttributeName:
                UIColor.red])
        }
    }
    else {


请注意您的if语句是如何嵌套的。除非pwdField为空,否则将不检查emailField

要对其进行修复,请注意,我将else移到了else if位置,

固定代码:

@IBAction func signInTapped(_ sender: Any)
{
    if emailField.text == ""
    {
        emailField.attributedPlaceholder = NSAttributedString(string: "Email
            address", attributes: [NSForegroundColorAttributeName:
            UIColor.red])
    }

    if pwdField == ""
    {
        pwdField.attributedPlaceholder = NSAttributedString(string:
            "Password", attributes: [NSForegroundColorAttributeName:
            UIColor.red])
    }

    else if emailField.text != ""
    {
         //here both fields have text inside them
    }

}

10-08 17:49