func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let currentCharacterCount = textField.text?.characters.count ?? 0
if (range.length + range.location > currentCharacterCount){
return false
}
let newLength = currentCharacterCount + string.characters.count - range.length
return newLength <= 1
}
我应该在哪里首先辞职文本字段?我需要从一个文本字段移动到另一个文本字段,因为用户只输入 1 个字符
按照
您希望它们一个接一个处于活动状态的顺序为您的文本字段分配标签。根据您当前的 textField 标签获取下一个 textField,并使其成为第一响应者。这是此代码。
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let currentCharacterCount = textField.text?.characters.count ?? 0
if (range.length + range.location > currentCharacterCount){
return false
}
let newLength = currentCharacterCount + string.characters.count - range.length
if(newLength < 1){
return true
}else if (newLength == 1){
let textfield = self.view.viewWithTag(textField.tag + 1)
let delayInSeconds = 0.5
let delay = dispatch_time(DISPATCH_TIME_NOW, Int64(delayInSeconds * Double(NSEC_PER_SEC)))
dispatch_after(delay, dispatch_get_main_queue()) {
textfield?.becomeFirstResponder();
}
return true;
}else{
return false;
}
}
它不必那么复杂。
不要打扰委托人。而是使用附加到 UITextField 的 editChanged 操作的 IBAction。
下面的代码假设textField[0]
只允许容纳 1 个字符。 输入角色后,textField[1]
将成为第一响应者。
class ViewController: UIViewController {
@IBOutlet var textFields: [UITextField]!
@IBAction func editingChangedAction(sender: UITextField) {
if sender === textFields[0] && sender.text?.characters.count >= 1 {
textFields[1].becomeFirstResponder()
}
}
}
用户仍然可以将多个字符粘贴到字段中。如果您担心这一点,可以修剪 if 块内字段的文本。