退格键不调用 uitextfield 的方法
Posted
技术标签:
【中文标题】退格键不调用 uitextfield 的方法【英文标题】:backspace press not calling uitextfield's method 【发布时间】:2016-11-25 09:10:29 【问题描述】:我有四个用于 OTP 的 textField,并且还在 ViewDidLoad() 方法中将委托设置为我的视图控制器
我也实现了委托方法:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
if string.characters.count > 1
return false
else
var tag = textField.tag
if string.characters.count == 0
tag -= 1
else
tag += 1
textField.text = string
// Try to find next responder
let nextResponder = textField.superview?.viewWithTag(tag) as UIResponder!
nextResponder?.becomeFirstResponder()
return false
func textFieldShouldReturn(textField: UITextField) -> Bool
print("BACKSPACE PRESSED")
return true
但是当字段为空时,这两个方法都不会调用,实际上我想要明文。当文本字段为空时,如何检测“退格”的任何想法
【问题讨论】:
您是否连接或设置了您的textField
的delegate
?
请参考***.com/q/1977934/5215474
如果你发现“BACKSPACE PRESSED”那么你想开发什么功能?
Return 并不意味着退格。 Return 表示回车(按下回车键)。
@jigneshVadadoriya 我希望以前的文本字段成为第一响应者
【参考方案1】:
有检测退格的代码
const char * _char = [string cStringUsingEncoding:NSUTF8StringEncoding];
int isBackSpace = strcmp(_char, "\b");
if (isBackSpace == -8)
// Code there
【讨论】:
在“shouldChangeCharactersInRange”委托方法中。【参考方案2】:直接识别退格不是正确的逻辑。根据您的要求,您的文本字段变为空白,然后您希望以前的文本字段成为第一响应者,然后您需要像这样编写代码
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
var txtAfterUpdate:NSString = textField.text! as NSString
txtAfterUpdate = txtAfterUpdate.replacingCharacters(in: range, with: string) as NSString
let updatedString = txtAfterUpdate as String
if updatedString.characters.count == 0
var tag = textField.tag
tag -= 1
let nextResponder = textField.superview?.viewWithTag(tag) as UIResponder!
nextResponder?.becomeFirstResponder()
return true
else
// rest of your functionality
return true
希望对你有帮助。
【讨论】:
textField 为空时该方法不调用【参考方案3】:我通过覆盖 UITextField 的以下方法来获得解决方案。
class MYTextField: UITextField
override func deleteBackward()
super.deleteBackward()
delegate?.textFieldShouldReturn!(self)
print("_____________BACKSPACE_PRESSED_____________")
【讨论】:
以上是关于退格键不调用 uitextfield 的方法的主要内容,如果未能解决你的问题,请参考以下文章
如果我长时间按退格键,UITextField shouldChangeCharactersInRange 将停止调用
使用 shouldChangeCharactersInRange 在 UITextField 验证中考虑退格