From 3fd3f3304071ff5a4e292ab9439e29848a2abbe5 Mon Sep 17 00:00:00 2001 From: plastus Date: Mon, 30 Jan 2017 14:12:43 -0500 Subject: [PATCH] Text field return bug fix Fixes non-functional return key on keyboard when more than one text field is present in an alert controller. --- Source/JHTAlertController.swift | 35 +++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/Source/JHTAlertController.swift b/Source/JHTAlertController.swift index c579310..e1b3526 100644 --- a/Source/JHTAlertController.swift +++ b/Source/JHTAlertController.swift @@ -582,6 +582,7 @@ public class JHTAlertController: UIViewController, UIViewControllerTransitioning /// - Returns: should return value public func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() + textField.nextTextFieldField()?.becomeFirstResponder() return true } @@ -606,3 +607,37 @@ public class JHTAlertController: UIViewController, UIViewControllerTransitioning return JHTAlertAnimation(isPresenting: false) } } + +extension UITextField{ + // Author of extension: Imbru from StackOverflow + // Allows keyboard next/done buttons to function correctly with more than one field input. + func nextTextFieldField() -> UITextField?{ + //field to return + var returnField : UITextField? + if self.superview != nil{ + //for each view in superview + for (_, view) in self.superview!.subviews.enumerated(){ + //if subview is a text's field + if view is UITextField { + //cast curent view as text field + let currentTextField = view as! UITextField + //if text field is after the current one + if currentTextField.frame.origin.y > self.frame.origin.y{ + //if there is no text field to return already + if returnField == nil { + //set as default return + returnField = currentTextField + } + //else if this this less far than the other + else if currentTextField.frame.origin.y < returnField!.frame.origin.y{ + //this is the field to return + returnField = currentTextField + } + } + } + } + } + //end of the mdethod + return returnField + } +}