How to go through all text fields with the "Next" Button on the iPhone/iOS Keyboard?



To go through all the text fields one by one on tap on done or return button, we’ll have to create a logic. Let’s understand it with help of a project.

  • Create a project and on the view controller story board drag Four text fields.

  • Select them one by one and from attribute, inspector set their tags as 1,2,3,4 respectively.

  • Also set their return key to Done from the attribute inspector itself.

  • Create outlets for all four text fields in the View controller class, connect them to their respective outlets.

@IBOutlet weak var tf1: UITextField! @IBOutlet weak var tf2: UITextField! @IBOutlet weak var tf3: UITextField! @IBOutlet weak var tf4: UITextField!
  • Extend the ViewController class to UITextFieldDelegate, and write the method, textFieldShouldReturn

extension ViewController: UITextFieldDelegate {    func textFieldShouldReturn(_ textField: UITextField) -> Bool { } }
  • In the viewDidLoad() method of ViewController class, set their delegate to self, One by one.

override func viewDidLoad() {    super.viewDidLoad()    self.tf1.delegate = self    self.tf2.delegate = self    self.tf3.delegate = self    self.tf4.delegate = self }
  • Now in the method, we wrote above, add the following lines of code

let nextTag = textField.tag + 1 let nextTF = textField.superview?.viewWithTag(nextTag) as UIResponder! if nextTF != nil {    nextTF?.becomeFirstResponder() } else {    textField.resignFirstResponder() } return false

The complete ViewController class should now look like this,

import UIKit class ViewController: UIViewController {    @IBOutlet weak var tf1: UITextField!    @IBOutlet weak var tf2: UITextField!    @IBOutlet weak var tf3: UITextField!    @IBOutlet weak var tf4: UITextField!    override func viewDidLoad() {       super.viewDidLoad()       // Do any additional setup after loading the view, typically from a nib.       self.tf1.delegate = self       self.tf2.delegate = self       self.tf3.delegate = self       self.tf4.delegate = self    } } extension ViewController: UITextFieldDelegate {    func textFieldShouldReturn(_ textField: UITextField) -> Bool {       let nextTag = textField.tag + 1       let nextTF = textField.superview?.viewWithTag(nextTag) as UIResponder!       if nextTF != nil {          nextTF?.becomeFirstResponder()       } else {          textField.resignFirstResponder()       }       return false    } }

This is how the app looks on xcode and simulator respectively

Updated on: 2020-06-27T13:24:46+05:30

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements