Within your ViewController
class, for each textfield, create an @IBOutlet property by Ctrl-dragging each text field from the storyboard to your code
@IBOutlet weak var textFieldFirst: UITextField!
@IBOutlet weak var textFieldSecond: UITextField!
Also create a private UITextField
property to hold the (possibly) current (/most recently used) text field.
private var currentTextField: UITextField?
Override the viewDidLoad
method of your UIViewController
subclass to initialize the delegates for the two "public" text field instances
override func viewDidLoad() {
super.viewDidLoad()
// Handle the user input in the text fields through delegate callbacks (and set tags)
textFieldFirst.delegate = self
textFieldFirst.tag = 1
textFieldSecond.delegate = self
textFieldSecond.tag = 2
}
Moreover, use the two textFieldShouldReturn(...)
and textFieldDidBeginEditing(...)
methods of the UITextFieldDelegate
to resign the (active) text fields status's as first responder and to update the currentTextField
reference, respectively.
// UITextFieldDelegate
func textFieldShouldReturn(textField: UITextField) -> Bool {
// User finished typing (hit return): hide the keyboard.
textField.resignFirstResponder()
return true
}
func textFieldDidBeginEditing(textField: UITextField) {
currentTextField = textField
}
Finally, resign any possibly current text field as first responder, in case submit
is pressed in-middle-of editing
@IBAction func Submit(sender: UIButton) {
if let currentTextField = currentTextField {
currentTextField.resignFirstResponder()
}
print(firstName)
print(lastName)
}
With this, your view controller should work as intended.
To summarize: after the additions and modifications above, your ViewController
class should look like
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
// Properties
@IBOutlet weak var textFieldFirst: UITextField!
@IBOutlet weak var textFieldSecond: UITextField!
private var currentTextField: UITextField?
var firstName = ""
var lastName = ""
@IBOutlet var buttonUI: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
// Actions
@IBAction func Submit(sender: UIButton) {
if let currentTextField = currentTextField {
currentTextField.resignFirstResponder()
}
print(firstName)
print(lastName)
}
// viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
// handle the user input in the text fields through delegate callbacks
textFieldFirst.delegate = self
textFieldSecond.delegate = self
// tags
textFieldFirst.tag = 1
textFieldSecond.tag = 2
}
// UITextFieldDelegate
func textFieldShouldReturn(textField: UITextField) -> Bool {
// User finished typing (hit return): hide the keyboard.
textField.resignFirstResponder()
return true
}
func textFieldDidBeginEditing(textField: UITextField) {
currentTextField = textField
}
func textFieldDidEndEditing(textField: UITextField) {
switch textField.tag {
case 1:
firstName = textField.text!
print(firstName)
case 2:
lastName = textField.text!
print(lastName)
default: break
}
}
}