Ios Swift中的NSTextStorage子类';更新UITextView
我试图在Swift中创建一个简单的NSTextStorage子类,但当我在textView中键入时,没有显示任何文本 这是我在视图控制器中的设置代码Ios Swift中的NSTextStorage子类';更新UITextView,ios,objective-c,cocoa,cocoa-touch,swift,Ios,Objective C,Cocoa,Cocoa Touch,Swift,我试图在Swift中创建一个简单的NSTextStorage子类,但当我在textView中键入时,没有显示任何文本 这是我在视图控制器中的设置代码 var textView: UITextView! var textStorage: CustomTextStorage? override func viewDidLoad() { super.viewDidLoad() textStorage = CustomTextStorage() let layoutMan
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)
}
在myCustomTextStorage
子类中:
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)
}
问题:每次我在文本视图中键入时,replaceCharactersRange:withString:
会被正确的字符串调用,但是范围
为{0,0},文本视图中不会出现任何内容。不过,键盘上方的建议栏确实发生了变化
另一方面,setAttributes:
被调用的范围为{0,1}(正确的值),导致异常:
nsmutablerearray replaceObjectsRange:withObject:length::Out-bounds'
我通过首先检查范围是否在边界内避免了这种情况,但这并不能解决第一个问题
任何帮助都会很棒 看起来我在CustomTextStorage.swift
中展示了以下内容:
override func processEditing() {
}
需要在该方法中调用super.processEditing()
。哎呀
我在其他网站和邮件列表上看到了一些类似的问题,但没有得到答案