2017-08-17 79 views
1

我有6个uitextfield.And我做了自动对焦。一旦用户在一个文本字段中输入一个值,他们将自动重定向到下一个文本字段。但我不知道如何处理backspace。就像当用户在上一次textfield并按退格删除value ..again时,他们必须移动到5,4,3,2,1各自的textfields.How怎么做?如何处理uitextfield中的退格键

这里我自动对焦代码:

@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() 
      } 
     } 




    } 

提前感谢!

+1

如果sender.text?.characters.count == 0 - 那是一个退格 –

+0

这个链接帮助你https://stackoverflow.com/questions/42642357/want-to-know-ever-time-while-按下键盘后退按钮在textfield-e –

+0

你解决了你的问题吗? – Jaydeep

回答

0

夫特3.0

记住editing(_:)动作是使用EditingChanged事件绑定。

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

但我会建议你使用下面的方法UITextFieldDelegate

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

    } 
0

这应该工作:

// 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

首先你不应该去前面的TF上退格自来水,因为它不是标准的IOS。但是,您可以通过以下方式实现它:

在shouldchangecharacters方法中,您需要确定点击的按钮是否为退格,然后使用标记单独标识每个文本字段。所以当你得到退格时,你可以通过减少当前文本字段的标签值并使之前的文本字段成为第一响应者来获得以前的文本字段。

对于所有文本字段都是相同的,所以您不必使用昂贵的if-else条件来实现它。