Я создаю ввод электронной почты и ввод имени, и мне нужно показать сообщение, когда все поля заполнены. Но по какой-то причине, когда есть пустые поля и пользователь нажимает кнопку отправки, вместо этого отображается сообщение об успехе. Есть ли способ вставить предложение или что-то, чтобы запустить его после того, как все поля заполнены? Спасибо за помощь.
Вот мой код:
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)
}
}
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
}
Как это звучит, создать делегата с регулярным выражением? каждый раз, когда вы нажимаете клавишу, вызываете делегата, и если он соответствует регулярному выражению, вы можете показать UILabel ... что-то подобное может сработать.
Для вашей проблемы следующее изменение обработает ошибку. После того, как вы подтвердите адрес электронной почты, вы не вернете или не остановите поток, и он выполнит оставшийся код в вашей функции. Так что вам нужно остановить казнь.
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
}
+ Изменить
displayAlertMessage(messageToDisplay: "Email address is not valid")
Чтобы
displayAlertMessage(messageToDisplay: "Email address is not valid")
return
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.