我有一个NSTextView包含供用户编辑的数据,但我想用不可编辑数据的页眉和页脚包围它,以便让用户了解上下文.
我不认为NSTextView可以处理混合可编辑/不可编辑数据的概念,所以我想出了一些想法.
a)使用带有自定义单元格的文本附件来绘制页眉和页脚.
b)内有3 NSTextView秒NSScrollView.
c)使用属性来确定无法编辑的内容,并使用委托方法来防止编辑,这可能是我最喜欢的,因为它可能是最不具侵入性的.
我错过了什么,有什么更好的想法吗?
NSTextView委托方法-textView:shouldChangeTextInRange:replacementString:将允许您这样做.你可以"只说不"改变.;-)
更新/详细说明(2015年11月)
要根据对此答案的评论进行详细说明,我们的想法是在文本视图正在编辑的属性字符串上使用您自己的自定义属性.除标准属性外,您还可以指定自己的属性名称(任意NSString)和PLIST兼容对象作为该名称的值.
例如,如果你想指定范围的文本为"不可编辑"中,你可以添加一个属性为范围内命名(例如)属性@"TextIsEditableAttributeName"有NSNumber一个BOOL价值YES或者NO:[NSNumber NO]或者@( NO )(使用ObjC数拳-同结果:一个NSNumber实例).稍后,当文本视图询问其委托是否应更改范围内的文本时,您可以检查@"TextIsEditableAttributeName"属性是否存在的范围.
实际上,只需要将属性分配给不可编辑的范围,因此您甚至不必检查该值.您可以在NSData那里为占位符放置一个空实例,以便该属性具有值.你的属性名称可能是@"EditingLocked"什么.这意味着你只需要检查是否有存在的的@"EditingLocked"属性在建议范围内的任何地方,并返回NO时,文本视图问道.这将捕获可编辑范围与不可编辑范围的重叠选择(如果允许选择复制不可编辑文本).
当然,这种方法可以用于-textView:willChangeSelectionFromCharacterRanges:toCharacterRanges:另一种委托方法,该方法允许您返回"已校正"的范围值数组以供选择.如果您不想允许选择不可编辑的文本,则可以"剪切" @"EditingLocked"您在建议范围中找到的属性的任何实例所描述的范围.
我希望这有帮助.
| 归档时间: |
|
| 查看次数: |
1911 次 |
| 最近记录: |