Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Next/Done button using Swift with textFieldShouldReturn

I have a MainView that adds a subview (signUpWindow) when a sign up button is pressed.

In my signUpWindow subview (SignUpWindowView.swift), I set up each field with a function, as an example:

func confirmPasswordText()     {         confirmPasswordTextField.frame=CGRectMake(50, 210, 410, 50)         confirmPasswordTextField.placeholder=("Confirm Password")         confirmPasswordTextField.textColor=textFieldFontColor         confirmPasswordTextField.secureTextEntry=true         confirmPasswordTextField.returnKeyType = .Next         confirmPasswordTextField.clearButtonMode = .WhileEditing         confirmPasswordTextField.tag=5         self.addSubview(confirmPasswordTextField)     } 

I have the keyboard moving the signUpWindow up and down when it appears and disappears in the MainView.

SignUpWindowView implements the UITextFieldDelegate

My problem is that I am trying to configure the Next/Done button on the keyboard and am not sure which view (MainView or SignUpWindowView) to add the textFieldShouldReturn function. I have tried both, but can't even get a println to fire to test to see if the function is even being executed. Once I get the textFieldShouldReturn to fire, I am confident I can execute the necessary code to get the Next/Done buttons to do what I want, and will post the final solution to include the Next/Done function.

UPDATED to include an abbreviated version of SignUpWindowView.swift

import UIKit  class SignUpWindowView: UIView,UITextFieldDelegate {  let firstNameTextField:UITextField=UITextField() let lastNameTextField:UITextField=UITextField()  override func drawRect(rect: CGRect){     func firstNameText(){         firstNameTextField.delegate=self         firstNameTextField.frame=CGRectMake(50, 25, 200, 50)         firstNameTextField.placeholder="First Name"         firstNameTextField.returnKeyType = .Next         self.addSubview(firstNameTextField)      }      func lastNameText(){         lastNameTextField.delegate=self         lastNameTextField.frame=CGRectMake(260, 25, 200, 50)         lastNameTextField.placeholder="Last Name"         lastNameTextField.returnKeyType = .Done         self.addSubview(lastNameTextField)      }      func textFieldShouldReturn(textField: UITextField!) -> Bool{         println("next button should work")         if (textField === firstNameTextField)         {             firstNameTextField.resignFirstResponder()             lastNameTextField.becomeFirstResponder()         }         return true      }      firstNameText()     lastNameText() } 
like image 232
Amy Plant Avatar asked Apr 28 '15 17:04

Amy Plant


1 Answers

You need to implement UITextFieldDelegate in your class and set that object as the delegate for the UITextField. Then implement the method textFieldShouldReturn: like this:

func textFieldShouldReturn(textField: UITextField) -> Bool {     textField.resignFirstResponder()     if textField == someTextField { // Switch focus to other text field         otherTextField.becomeFirstResponder()     }     return true } 

In your example you are missing this line:

confirmPasswordTextField.delegate = self 

If you have implemented the delegate of course.

like image 70
Stefan Salatic Avatar answered Sep 21 '22 22:09

Stefan Salatic