我正在尝试在 Swift 中创建一个简单的 NSTextStorage 子类,但是当我在 textView 中输入内容时,没有出现任何文本。
这是我在 View Controller 中的设置代码
var textView: UITextView!
var textStorage: CustomTextStorage?
override func viewDidLoad() {
super.viewDidLoad()
textStorage = CustomTextStorage()
let layoutManager = NSLayoutManager()
textStorage!.addLayoutManager(layoutManager)
let textContainer = NSTextContainer(size: view.bounds.size)
layoutManager.addTextContainer(textContainer)
textView = UITextView(frame: view.bounds, textContainer: textContainer)
view.addSubview(textView)
}
在我的 CustomTextStorage
子类中:
var store: NSMutableAttributedString = NSMutableAttributedString()
func string() -> NSString {
return store.string
}
override func attributesAtIndex(location: Int, effectiveRange range: NSRangePointer) -> [NSObject : AnyObject] {
return store.attributesAtIndex(location, effectiveRange: range)
}
override func replaceCharactersInRange(range: NSRange, withString str: String) {
store.replaceCharactersInRange(range, withString: string)
edited(NSTextStorageEditActions.EditedCharacters, range: range, changeInLength:countElements(str) - range.length)
}
override func setAttributes(attrs: [NSObject : AnyObject]?, range: NSRange) {
store.setAttributes(attrs, range: range)
edited(NSTextStorageEditActions.EditedAttributes, range: range, changeInLength: 0)
}
问题:每次我在textView中输入内容时,都会使用正确的字符串
调用replaceCharactersInRange:withString:
,但是范围
{0,0},并且 textView 中没有显示任何内容。不过键盘上方的建议栏确实发生了变化。
顺便说一句,setAttributes:
被调用,范围为 {0,1}(正确的值),导致异常:
NSMutableRLEArray ReplaceObjectsInRange:withObject:length::越界'
我通过首先检查范围是否在边界内来避免这种情况,但这并不能解决第一个问题。
任何帮助都会很棒!
最佳答案
看起来我在 CustomTextStorage.swift
中显示的内容下面有这个:
override func processEditing() {
}
需要在该方法中调用 super.processEditing()
。哎呀。
因为我在其他网站和邮件列表上看到一些没有答案的类似问题,所以把它留在这里。
关于ios - Swift 中的 NSTextStorage 子类不更新 UITextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26579915/