【发布时间】:2021-12-04 15:30:41
【问题描述】:
我有自定义键盘,我添加为textfield.inputView。但是我在UITextFieldDelegate 的shouldChangeCharactersIn 不起作用?有什么想法吗?
【问题讨论】:
我有自定义键盘,我添加为textfield.inputView。但是我在UITextFieldDelegate 的shouldChangeCharactersIn 不起作用?有什么想法吗?
【问题讨论】:
在将文本插入控件之前,您必须自己实现对委托方法的调用。
例如,假设您有一些处理按钮点击的函数,它调用UIKeyInput 方法insertText。只需检查委托是否实现了该方法并且它没有返回false:
@objc func didTapButton(_ sender: ...) {
guard let range = target?.selectedRange else { return } // assumes `target` was defined to conform to `UITextInput`, using extension shared below
let string = ...
if let textField = target as? UITextField, textField.delegate?.textField?(textField, shouldChangeCharactersIn: range, replacementString: string) == false {
return
}
if let textView = target as? UITextView, textView.delegate?.textView?(textView, shouldChangeTextIn: range, replacementText: string) == false {
return
}
target?.insertText(string) // assumes `target` was defined to conform to `UIKeyInput`
}
地点:
extension UITextInput {
var selectedRange: NSRange? {
guard let textRange = selectedTextRange else { return nil }
let location = offset(from: beginningOfDocument, to: textRange.start)
let length = offset(from: textRange.start, to: textRange.end)
return NSRange(location: location, length: length)
}
}
显然,细节取决于您的自定义键盘实现(以上基于https://stackoverflow.com/a/57275689/1271826),但希望它能说明基本思想。
【讨论】: