在文本字段中分配和辞职第一响应者
Posted
技术标签:
【中文标题】在文本字段中分配和辞职第一响应者【英文标题】: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:)'。 【参考方案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!]
【讨论】:
以上是关于在文本字段中分配和辞职第一响应者的主要内容,如果未能解决你的问题,请参考以下文章
使用 UIToolbar/UITextField 辞职第一响应者问题