Я создаю ввод электронной почты и ввод имени, и мне нужно показать сообщение, когда все поля заполнены. Но по какой-то причине, когда есть пустые поля и пользователь нажимает кнопку отправки, вместо этого отображается сообщение об успехе. Есть ли способ вставить предложение или что-то, чтобы запустить его после того, как все поля заполнены? Спасибо за помощь.

Вот мой код:

import UIKit
import MessageUI

class RequestFilterVC: UIViewController {

    @IBOutlet weak var emailTxtField: UITextField!
    @IBOutlet weak var filterTxtField: UITextField!
    @IBOutlet weak var requestBtn: UIButton!        
    @IBOutlet weak var validatorMessage: UILabel!        
    @IBOutlet weak var requestedMessage: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        // hide validator message
        validatorMessage.isHidden = true            
        requestedMessage.isHidden = true
    }

    @IBAction func requestBtnWasTapped(_ sender: Any) {

        let providedEmailAddress = emailTxtField.text

        let isEmailAddressValid = isValidEmailAddress(emailAddressString: providedEmailAddress!)

        if isEmailAddressValid
        {
            print("Email address is valid")
        } else {
            print("Email address is not valid")
            displayAlertMessage(messageToDisplay: "Email address is not valid")
        }

        // If All are completed then send the email .
        let composeVC = MFMailComposeViewController()
        composeVC.mailComposeDelegate = self as? MFMailComposeViewControllerDelegate

        // Configure the fields of the interface.
        composeVC.setToRecipients(["myemail@awesomeemail.com])
        composeVC.setSubject("Form Submit)
        composeVC.setMessageBody("\(emailTxtField, filterTxtField)", isHTML: false)

        // Present the view controller modally
        //  self.present(composeVC, animated: true, completion: nil)
        requestedMessage.isHidden = false
        requestedMessage.text = "Submitted form . thank you"            
   }

    func isValidEmailAddress(emailAddressString: String) -> Bool {

        var returnValue = true
        let emailRegEx = "[A-Z0-9a-z.-_]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,3}"

        do {
            let regex = try NSRegularExpression(pattern: emailRegEx)
            let nsString = emailAddressString as NSString
            let results = regex.matches(in: emailAddressString, range: NSRange(location: 0, length: nsString.length))

            if results.count == 0
            {
                returnValue = false
            }                
        } catch let error as NSError {
            print("invalid regex: \(error.localizedDescription)")
            returnValue = false
        }

        return  returnValue
    }        

    func displayAlertMessage(messageToDisplay: String)
    {
        let alertController = UIAlertController(title: "Error", message: messageToDisplay, preferredStyle: .alert)

        let OKAction = UIAlertAction(title: "OK", style: .default) { (action:UIAlertAction!) in

            print("Ok button tapped");                
        }

        alertController.addAction(OKAction)

        self.present(alertController, animated: true, completion:nil)
    }    
}
0
user10141894 21 Авг 2018 в 21:00

4 ответа

Лучший ответ

Вы не проверяете , является ли второе текстовое поле пустым или нет. (Понятия не имею, почему вы назвали текстовое поле, в котором должно храниться имя, называется filterTextField)

if isEmailAddressValid && !filterTextField.text?.isEmpty {
    print("Email address is valid")
} else {
    print("Email address is not valid")
    displayAlertMessage(messageToDisplay: "Email address is not valid")
    return
}
0
Rakesha Shastri 21 Авг 2018 в 18:34

Как это звучит, создать делегата с регулярным выражением? каждый раз, когда вы нажимаете клавишу, вызываете делегата, и если он соответствует регулярному выражению, вы можете показать UILabel ... что-то подобное может сработать.

0
Alejandro L.Rocha 21 Авг 2018 в 18:03

Для вашей проблемы следующее изменение обработает ошибку. После того, как вы подтвердите адрес электронной почты, вы не вернете или не остановите поток, и он выполнит оставшийся код в вашей функции. Так что вам нужно остановить казнь.

if isEmailAddressValid
        {
            print("Email address is valid")
        } else {
            print("Email address is not valid")
            displayAlertMessage(messageToDisplay: "Email address is not valid")
        }

Однако для лучшего подхода я бы предложил отключить кнопку отправки, пока текстовое поле не будет иметь значения.

func textFieldDidBeginEditing(textField: UITextField!) {    //delegate method
   //check for the required text field  
   if (emailTxtField.text!.isEmpty){
      //disable submit button
    }
   else{
     // enable the submit button
     }
}

func textFieldShouldEndEditing(textField: UITextField!) -> Bool {  //delegate method
   if (emailTxtField.text!.isEmpty){
      //disable submit button
    }
   else{
     // enable the submit button
     }
    return true
} 
0
Vinay Kiran 21 Авг 2018 в 18:48

+ Изменить

displayAlertMessage(messageToDisplay: "Email address is not valid")

Чтобы

displayAlertMessage(messageToDisplay: "Email address is not valid")
return
0
matt 21 Авг 2018 в 18:07
51954309