2017-08-17 4 views
1

handhaben Ich habe 6 uitextfield.And ich habe den Autofokus. Sobald der Benutzer einen Wert in ein Textfeld eingegeben hat, wird automatisch zum nächsten Textfeld umgeleitet. Aber ich weiß nicht, wie man mit der Rücktaste umgehen. Wie wenn Benutzer im letzten Textfeld und drücken Sie die Rücktaste, um den Wert zu löschen .. wieder müssen sie bewegen, um 5,4,3,2,1 jeweiligen textfields.Wie das zu tun?Wie man Rücktaste in uitextfield

Hier ist mein Code für den Autofokus:

@IBAction func editing(_ sender: UITextField) 
    { 


     if sender == TextFieldOne { 
      if sender.text?.characters.count == 1 { 
       TextFieldTwo.becomeFirstResponder() 
      } 
     } 

     else if sender == TextFieldTwo { 
      if sender.text?.characters.count == 1 { 
       TextFieldThree.becomeFirstResponder() 
      } 
     } 

     else if sender == TextFieldThree { 
      if sender.text?.characters.count == 1 { 
       TextFieldFour.becomeFirstResponder() 
      } 
     } 
     else if sender == TextFieldFour { 
      if sender.text?.characters.count == 1 { 
       TextFieldFive.becomeFirstResponder() 
      } 
     } 
     else if sender == TextFieldFive { 
      if sender.text?.characters.count == 1 { 
       TextFieldSix.becomeFirstResponder() 
      } 
     } 

     else if sender == TextFieldSix { 
      if sender.text?.characters.count == 1 { 
       TextFieldSix.resignFirstResponder() 
      } 
     } 




    } 

Vielen Dank im Voraus!

+1

wenn sender.text? .characters.count == 0 - das war eine Rücktaste –

+0

Dieser Link hilft Ihnen https://stackoverflow.com/questions/42642357/want-to-know-ever-time-while- Drücken-auf-Tastatur-Zurück-Taste-während-Textfeld-e –

+0

Haben Sie Ihr Problem gelöst? – Jaydeep

Antwort

0

Swift 3,0

Denken Sie daran, editing(_:) Aktion binden EditingChanged Ereignis verwenden.

if sender.text!.length == 0 { 
     // textfield where you want to Focus. 
     yourTextField.becomeFirstResponder() 
} 

Aber ich werde vorschlagen, dass Sie unter Methode der UITextFieldDelegate zu verwenden.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 

    } 
0

sollte diese Arbeit:

// Array corresponding to the focus order of your textFields 
let textFields = [TextFieldOne, TextFieldTwo, TextFieldThree, TextFieldFour, TextFieldFive, TextFieldSix] 

func editing(_ sender: UITextField) { 
    // Get sender index in textFields array 
    guard let senderIndex = textFields.index(of: sender) else { return } 

    // Char typed 
    if sender.text?.characters.count == 1 { 
     let nextTextFieldIndex = textFields.index(after: senderIndex) 

     // Last textField: Remove focus 
     if nextTextFieldIndex == textFields.count { 
      textFields[senderIndex].resignFirstResponder() 
     } else { // Other case: Focus next 
      textFields[nextTextFieldIndex].becomeFirstResponder() 
     } 

    } else { // Char removed 
     let previousTextFieldIndex = textFields.index(before: senderIndex) 

     // If not first textField: Focus previous 
     if previousTextFieldIndex != -1 { 
      textFields[previousTextFieldIndex].becomeFirstResponder() 
     } 
    } 
} 
0

allererst Sie nicht zur vorherige tf vom Fass auf Backspace gehen sollten, wie es in IOS nicht Standard ist. Aber hier ist die Art und Weise, wie Sie es erreichen können:

In der Methode somethatcharacters müssen Sie erkennen, ob die angetippte Schaltfläche Backspace ist, und dann verwenden Sie Tags, um jedes der Textfelder seprately zu identifizieren. Wenn Sie die Rücktaste erhalten, können Sie das vorherige Textfeld abrufen, indem Sie den Wert des Tags aus dem aktuellen Textfeld verkleinern und den vorherigen Wert zum Ersthelfer machen.

Es wird für alle Textfelder gleich sein, also müssen Sie nicht teure if-else Bedingungen verwenden, um es zu erreichen.

Verwandte Themen