2016-10-25 5 views
0

Ein ViewController besteht aus zwei TextFields mit dem Namen textName & textEmail. View Controller lädt mit dem Cursor auf textName. textName enthält das vorbelegte Wort "@ gmail.com".Cursor am Anfang von UITextField

Beim Drücken der Return-Taste der Tastatur von textName wird der Fokus auf Textfield textEmail verschoben. Hier wird standardmäßig der Cursor hinter dem Wort "@ gmail.com" platziert.

Ich möchte den Cursor am Anfang platzieren lassen. d. h. vor @ gmail.com

Hier ist mein Code. Wenn ich die Return-Taste von textName drücke, springt der Cursor an den Anfang von textEmail. Aber wenn ich TextEmail direkt anklicke, erscheint der Cursor nach dem vorbelegten Wort. Bitte hilf mir!

func textFieldShouldReturn(textField: UITextField) -> Bool { 

     if textField == self.textName{ 
      textEmail.becomeFirstResponder() 
      let desiredPosition = textEmail.beginningOfDocument 
      textEmail.selectedTextRange = textEmail.textRangeFromPosition(desiredPosition, toPosition: desiredPosition) 
     } 

     if textField == self.textEmail{ 


      dismissViewControllerAnimated(true, completion: nil) 

     } 

     return true 
    } 

Als Hinweis, habe ich die Bearbeitung versuchen begann Aktion für textEmail und unter Code hinzugefügt, aber es hat nicht funktioniert.

let desiredPosition = textEmail.beginningOfDocument 
      textEmail.selectedTextRange = textEmail.textRangeFromPosition(desiredPosition, toPosition: desiredPosition) 

Antwort

1

Versuchen Sie stattdessen:

func textFieldDidBeginEditing(_ textField: UITextField) { 
    if textField == self.textName{ 
     let beginning = textField.beginningOfDocument 
     textField.selectedTextRange = textField.textRange(from: beginning, to: beginning) 
    } 
} 

So textEmail.becomeFirstResponder() entfernen und textField.textRange statt textEmail.textRangeFromPosition verwenden.

Und innerhalb der textFieldDidBeginEditing Funktion verwenden Sie den Parameter textField wie in meinem Beispiel oben gezeigt.

+0

i war manuell verwenden cre ated DidBeginEditing Aktion. textFieldDidBeginEditing hat funktioniert. – NKay

0

Erste tou gesetzt Delegierten UITextFieldDelegate

Nachdem Sie TextField- Delegierten eingestellt Selbst in viewDidLoad

Beispiel

textName.delegate = self 
textEmail.delegate = self 

dann Kopieren Sie diese Methode in Ihrem Viewcontroller

func textFieldShouldReturn(textField: UITextField) -> Bool 
    { 
     if textField == textName 
     { 
      textName.resignFirstResponder() 
      textEmail.becomeFirstResponder() 
      textEmail.text = "@gmail.com" 
      let newPosition = textField.beginningOfDocument 
      textEmail.selectedTextRange = textEmail.textRangeFromPosition(newPosition, toPosition: newPosition) 



     } 
     else if textField == textEmail 
     { 
      textEmail.resignFirstResponder() 
     } 
     return true 
    }