As of version 8.0, IQKeyboardReturnManager is now an independent package, separated from the main IQKeyboardManager library. It automatically handles return key behavior, allowing users to navigate between text fields by pressing the return key.
IQKeyboardReturnManager was previously named IQReturnKeyHandler and was part of IQKeyboardManager. It has been renamed and extracted into its own package.
# Install IQKeyboardReturnManager independentlypod 'IQKeyboardReturnManager'# Or as a subspec of IQKeyboardManager for easier migrationpod 'IQKeyboardManagerSwift/IQKeyboardReturnManager'
import IQKeyboardReturnManagerclass MyViewController: UIViewController { @IBOutlet var nameTextField: UITextField! @IBOutlet var emailTextField: UITextField! @IBOutlet var passwordTextField: UITextField! private lazy var returnKeyManager = IQKeyboardReturnManager(controller: self) override func viewDidLoad() { super.viewDidLoad() // Return key manager is automatically enabled when created // It will handle return key presses in this view controller }}
// Navigate to next text field programmaticallyreturnKeyManager.goNext()// Navigate to previous text fieldreturnKeyManager.goPrevious()// Dismiss keyboardreturnKeyManager.resignFirstResponder()
protocol IQKeyboardReturnManagerDelegate: AnyObject { // Called to determine if keyboard should dismiss on return func shouldResignOnReturn(_ textInputView: UIView) -> Bool // Called when text field begins editing func didBeginEditing(_ textInputView: UIView) // Called when text field ends editing func didEndEditing(_ textInputView: UIView)}
Store the IQKeyboardReturnManager instance as a property to keep it in memory throughout the view controller’s lifetime.
private lazy var returnKeyManager = IQKeyboardReturnManager(controller: self)
One Manager Per View Controller
Create one return key manager per view controller, not per text field.
// ✅ Correct - one manager for the view controllerclass FormViewController: UIViewController { private lazy var returnKeyManager = IQKeyboardReturnManager(controller: self)}// ❌ Incorrect - don't create multiple managersclass FormViewController: UIViewController { private lazy var manager1 = IQKeyboardReturnManager(controller: self) private lazy var manager2 = IQKeyboardReturnManager(controller: self)}
Use with IQKeyboardManager
IQKeyboardReturnManager works seamlessly with IQKeyboardManager. Use both together for complete keyboard handling:
// In AppDelegateIQKeyboardManager.shared.isEnabled = true// In ViewControllerprivate lazy var returnKeyManager = IQKeyboardReturnManager(controller: self)