ViewController2
" Введите пароль " UITextField
значение должно быть передано ViewController3
.
ViewController3
" Подтвердите пароль " *Значение 1011 * необходимо сравнить с ViewController2
" Введите пароль " UITextField
, когда пользователь нажимает " Далее " UIButton
.
Еслизначения разные, « пароли не совпадают » UILabel
необходимо сделать видимыми над UITextField
, а « Next » UIButton
необходимо вернуться назадбыть неактивным.
На данный момент оба UITextFields
имеют критерии, требующие минимум 6 символов, поэтому " Next " UIButton
остается неактивным, пока критерии не будут выполнены.
ViewController2.swift :
import UIKit
class ViewController2: UIViewController, UITextFieldDelegate {
@IBOutlet weak var passwordField: UITextField!
@IBOutlet weak var toViewController3Button: UIButton!
@IBAction func backToViewController1(_ sender: Any) {
print("back button pressed")
self.performSegue(withIdentifier: "ViewController2ToViewController1Segue", sender: self)
}
@IBAction func toViewController3(_ sender: Any) {
print("next button pressed")
self.performSegue(withIdentifier: "ViewController2ToViewController3Segue", sender: self)
}
@IBAction func textFieldChangedValue(_ sender: UITextField) {
toViewController3Button.isEnabled = sender.text!.count >= 6
}
override func viewDidLoad() {
super.viewDidLoad()
print("ViewController2 has loaded")
// Is off until password criteria is satisfied
toViewController3Button.isEnabled = false
// Set delegate
passwordField.delegate = self
passwordField.becomeFirstResponder()
passwordField.addTarget(self, action: #selector(textFieldChangedValue(_:)), for: .editingChanged)
}
// Hide keyboard when Return key is pressed
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
passwordField.resignFirstResponder()
print("Keyboard Hidden by Return Key")
return true
}
// Global: Hide Keyboard when screen is touched outside of text field
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
print("Keyboard Hidden by Screen Tap")
}
// Confirm Password field must have 6 or more characters for Next -> button to activate
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField == passwordField {
let countAfter = textField.text!.count + string.count - range.length
toViewController3Button.isEnabled = countAfter >= 6
}
return true
}
}
ViewController3.swift:
import UIKit
class ViewController3: UIViewController, UITextFieldDelegate {
@IBOutlet weak var confirmPasswordField: UITextField!
@IBOutlet weak var toViewController4Button: UIButton!
@IBAction func backToViewController2(_ sender: Any) {
print("back button pressed")
self.performSegue(withIdentifier: "ViewController3ToViewController2Segue", sender: self)
}
@IBAction func toViewController4(_ sender: Any) {
print("next button pressed")
self.performSegue(withIdentifier: "ViewController3ToViewController4Segue", sender: self)
}
@IBAction func textFieldChangedValue(_ sender: UITextField) {
toViewController4Button.isEnabled = sender.text!.count >= 6
}
override func viewDidLoad() {
super.viewDidLoad()
print("ViewController3 has loaded")
// Is off until password criteria is satisfied
toViewController4Button.isEnabled = false
// Set delegate
confirmPasswordField.delegate = self
confirmPasswordField.becomeFirstResponder()
confirmPasswordField.addTarget(self, action: #selector(textFieldChangedValue(_:)), for: .editingChanged)
}
// Hide keyboard when Return key is pressed
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
confirmPasswordField.resignFirstResponder()
print("Keyboard Hidden by Return Key")
return true
}
// Global: Hide Keyboard when screen is touched outside of text field
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
print("Keyboard Hidden by Screen Tap")
}
// Confirm Password field must have 6 or more characters for Next -> button to activate
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField == confirmPasswordField {
let countAfter = textField.text!.count + string.count - range.length
toViewController4Button.isEnabled = countAfter >= 6
}
return true
}
}
В качестве альтернативы, если значенияиз обоих UITextFields
можно сравнивать на лету в реальном времени, так как пользователь вводит символы в " Подтвердить пароль " UITextField
, тогда это тоже хорошо (вместо использования " Далее "UIButton
, чтобы начать сравнение).
Я слишком неопытен, чтобы знать, какой маршрут является лучшим, поэтому любые другие советы, конечно, приветствуются.
Я смогпередать данные из VC1 в VC2 (как видно из приведенных ниже фрагментов кода), но не смог выяснить, как соединить остальную часть вместе.
ViewController1.swift:
import UIKit
class ViewController1: UIViewController {
@IBOutlet weak var passwordField: UITextField!
var passwordText = ""
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func done(_ sender: Any) {
self.passwordText = passwordField.text!
performSegue(withIdentifier: "ViewController1ToViewController2", sender: self)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
var vc = segue.destination as! ViewController2
vc.passwordFieldValue = self.passwordText
}
}
ViewController2.swift:
import UIKit
class ViewController2: UIViewController {
@IBOutlet weak var passwordFieldValue: UILabel!
@IBOutlet weak var confirmPasswordField: UITextField!
var passwordFieldValue = ""
override func viewDidLoad() {
super.viewDidLoad()
passwordFieldValue.text = passwordFieldValue
}
@IBAction func backToViewController(_ sender: Any) {
print("Back to ViewController")
self.performSegue(withIdentifier: "ViewController2ToViewController1", sender: self)
}
}