我有一个UITextView
正在从用户那里获取输入。我想用属性文本替换输入文本。当前,我正在使用textView(_:shouldChangeTextIn:replacementText:)
设置文本视图的attributedText
属性,然后返回false。除了添加或删除初始字符时,光标与输入的字母不同步外,这似乎工作正常。有时光标会在文本出现之前跳出,有时文本会在光标移回之前被删除。有什么办法可以使它们保持同步?
这并非一直发生,因此您必须继续删除并重新键入第一个字符。您可以在模拟器和5s上看到它,但是在X上看不到它。
这是一个例子:
import UIKit
class ViewController: UIViewController, UITextViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let textView = UITextView()
textView.delegate = self
textView.frame = {
var result = view.bounds
let top: CGFloat = 50.0
result.size.height -= top
result.origin.y += top
return result
}()
view.addSubview(textView)
}
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if text == "\n" {
textView.resignFirstResponder()
return false
}
let text = (textView.text as NSString).replacingCharacters(in: range, with: text)
let attributes: [NSAttributedString.Key: Any] = [
.font: UIFont.systemFont(ofSize: 17.0, weight: .bold)
]
textView.attributedText = NSAttributedString(
string: text,
attributes: attributes)
return false
}
}