Để cho phép người dùng nhấn nút "Next" hoặc "Return" trên bàn phím để chuyển sang Text Field tiếp theo, chúng ta cần triển khai logic xử lý delegate của UITextField.
Các bước thực hiện
- Tạo dự án, kéo 4 Text Field lên View Controller trong Storyboard.
- Chọn từng Text Field, vào Attribute Inspector đặt Tag lần lượt là 1, 2, 3, 4.
- Đặt Return Key thành "Next" (hoặc "Done" cho ô cuối) trong Attribute Inspector.
- Tạo outlet cho 4 Text Field trong ViewController:
@IBOutlet weak var tf1: UITextField!
@IBOutlet weak var tf2: UITextField!
@IBOutlet weak var tf3: UITextField!
@IBOutlet weak var tf4: UITextField!
- Kế thừa
UITextFieldDelegatevà triển khai phương thứctextFieldShouldReturn:
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
}
}
- Trong
viewDidLoad, gán delegate cho tất cả Text Field:
override func viewDidLoad() {
super.viewDidLoad()
tf1.delegate = self
tf2.delegate = self
tf3.delegate = self
tf4.delegate = self
}
Mã hoàn chỉnh của ViewController
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()
tf1.delegate = self
tf2.delegate = self
tf3.delegate = 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
}
}
Kết quả
Khi chạy trên Xcode và Simulator:


Mẹo nâng cao: Bạn có thể tạo extension chung cho UITextField hoặc sử dụng thư viện như IQKeyboardManager để tự động xử lý chuyển focus mà không cần gán tag thủ công.