我在最新的iOS版本中看到UITextView的一个奇怪问题。根据我目前的理解,它仅在iOS 13中发生。我的一个用户在iOS 12.4.1上报告了此问题,尽管我无法在任何iOS 13之前的设备上重现此问题。
我已经在Xcode 11中创建了一个小示例项目来解释该问题。该项目面向iOS13。我正在运行iOS 13.1.2(17A860)的iPhone 8上进行测试。该项目包含一个带有textview的简单视图控制器。 TextView具有autoCapitalizationType
作为“句子”。然后,我实现了委托方法shouldChangeTextInRange
方法。参见下面的代码
class ViewController: UIViewController {
@IBOutlet weak var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
self.textView.delegate = self
self.textView.autocapitalizationType = .sentences
}
}
extension ViewController: UITextViewDelegate {
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange,
replacementText text: String) -> Bool {
//I wanted to do some other modifications here, but for now just
//setting the user typed text manually and returning false
if let oldString = textView.text {
let newString = oldString.replacingCharacters(in: Range(range, in: oldString)!,
with: text)
textView.text = newString
}
return false
}
}
这是整个代码,但情节提要和其他项目文件除外。如您在上面看到的,我只是将用户输入的完全相同的文本手动设置到textview中,然后返回false。但是,当我键入内容时,第一个字符会按需添加到大写字母中。第二个字符正确以小写字母添加。从第三个角色开始,所有内容均显示上限。此外,键入每个字符后,键盘移位按钮会自动被选择。附有屏幕截图。
一些其他要点。
有人可以针对此问题提出修复/解决方法吗?
到目前为止,我发现的最佳解决方法是改为在textViewDidChange
中进行处理。
该错误也在这里讨论:Apple developer forum