Managing the Keyboard with Text field focus in Swift
Posted By : Akshay Luthra | 31-Mar-2016
This blog will help you to solve the very common issue of keyboard hiding the portion of your view when the text field is focused for editing
When users touch a text field, a text view, or a field in a web view, the system displays a keyboard. You have to manage the keyboard when the editing session begins and ends. Because the keyboard could hide the portion of your view that is the focus of editing, this management might include adjusting the user interface to raise the area of focus so that is visible above the keyboard.
Consider a screen having a scrollview and two text fields. For this case, you can use the below code for keyboard management :
class MyFavouritesAddNewItemViewController: UIViewController,UITextViewDelegate { @IBOutlet weak var firstTextField: UITextField! @IBOutlet weak var secondTextField: UITextField! @IBOutlet weak var scrollView: UIScrollView! override func viewDidLoad() { super.viewDidLoad() firstTextField.delegate = self secondTextField.delegate = self } func textFieldShouldReturn(textField: UITextField) -> Bool { textField.resignFirstResponder() return true } override func viewWillAppear(animated:Bool) { super.viewWillAppear(animated) NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillBeHidden:", name: UIKeyboardWillHideNotification, object: nil) NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil) } override func viewWillDisappear(animated: Bool) { super.viewWillDisappear(animated) NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillHideNotification, object: nil) NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardWillShowNotification, object: nil) } var activeField: UITextField? // Called when the UIKeyboardWillHideNotification is sent func keyboardWillBeHidden(aNotification: NSNotification) { let contentInsets: UIEdgeInsets = UIEdgeInsetsZero self.scrollView.contentInset = contentInsets self.scrollView.scrollIndicatorInsets = contentInsets } func textFieldDidBeginEditing(textField: UITextField) { activeField = textField } func textFieldDidEndEditing(textField: UITextField) { activeField = nil } func keyboardWillShow(aNotification: NSNotification) { var info: [NSObject : AnyObject] = aNotification.userInfo! let kbSize: CGSize = (info[UIKeyboardFrameEndUserInfoKey]?.CGRectValue.size)! let contentInsets: UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0) scrollView.contentInset = contentInsets scrollView.scrollIndicatorInsets = contentInsets var aRect: CGRect = self.view.frame aRect.size.height -= kbSize.height if !CGRectContainsPoint(aRect, activeField!.frame.origin) { self.scrollView.scrollRectToVisible(activeField!.frame, animated: true) } } }
Hope this blog will help you!
Thanks for reading it!
Cookies are important to the proper functioning of a site. To improve your experience, we use cookies to remember log-in details and provide secure log-in, collect statistics to optimize site functionality, and deliver content tailored to your interests. Click Agree and Proceed to accept cookies and go directly to the site or click on View Cookie Settings to see detailed descriptions of the types of cookies and choose whether to accept certain cookies while on the site.
About Author
Akshay Luthra
Akshay Luthra has excellent experience in developing Cross Platform Mobile Apps using JavaScript and Titanium Framework. He loves listening to music and travelling new places.