【问题标题】:Assigning and Resigning first responder in text field在文本字段中分配和辞职第一响应者
【发布时间】:2017-04-28 08:22:47
【问题描述】:

我正在实现一个 OTP 功能,如 Auto Resign and assign first responder in text field in Swift 所示,但在以下几行中出现错误,因为它们已被 Swift 3 弃用

    let start = text!.startIndex.advancedBy(range.location)
    let end = start.advancedBy(range.length)

解决方法是什么?

【问题讨论】:

  • 添加有问题的错误。
  • 使用 [textField resignFirstResponder] 和 [textField becomeFirstResponder] 是方法,但你在使用这些方法时遇到什么错误?
  • 'advancedBy' 不可用:要将索引推进 n 步,请在生成索引的 CharacterView 实例上调用 'index(_:offsetBy:)'。

标签: ios iphone swift3


【解决方案1】:

如果你想实现 otp 功能。以下是您可以使用的代码。 每个文本字段都有标签,根据标签值,您可以轻松响应下一个文本字段。

extension YOUR_VC:UITextFieldDelegate{

func textFieldDidBeginEditing(_ textField: UITextField) {
 // to make text field empty    
 textField.text = ""
}


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

    if(string.length == 1){
        textField.text = string
        textField.resignFirstResponder();

    }
    return false
}

func textFieldDidEndEditing(_ textField: UITextField) {
    // for making next text field first responder after a character is entered in previous textfield
    switch textField.tag {
    case 1:
        otpTextTwo.becomeFirstResponder()
    case 2:
        otpTextThree.becomeFirstResponder()
    case 3:
        otpTextFour.becomeFirstResponder()
    case 4:
        otpTextFive.becomeFirstResponder()
    case 5:
        otpTextSix.becomeFirstResponder()
    case 6:

       // self.doneFecthingOtp()
    default:
        //print("NOt case")
    }
} }

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    你应该在swift3中这样写:

    let start = text?.index((text?.startIndex)!, offsetBy: range.location)
    let end = text?.index(start!, offsetBy: range.length)
    let indexRange = text?[start! ..< end!]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多