天道酬勤,学无止境

nstextview

IBOutlet for NSTextView in a ARC project

As you read here in most cases a IBOutlet should be weak. Now as you can read in the development library not all classes support weak references. (e.g. NSTextView). This means you have to use assign: @property (assign) IBOutlet NSTextView *textView; If you use a weak reference you will get the following error: "Synthesis of a weak-unavailable property is disallowed because it requires synthesis of an ivar of the __weak object" What the documentation missed to mention is now you have to set the property again to nil after it's usage e.g. by a dealloc method: - (void)dealloc { self.textView =

2021-11-28 13:06:05    分类:问答    automatic-ref-counting   nstextview   iboutlet   weak

NSTextField 还是 NSTextView?(NSTextField or NSTextView?)

问题 有人可以向我解释 NSTextField 和 NSTextView 之间的主要区别是什么吗? 我知道 NSTextView 有更多功能,通常用于较长的文本,而 NSTextField 通常用于单行纯文本字段,但如果我理解正确,NSTextField 也可以用于属性字符串和多行... 我特别需要的是一个控件,它可以在时间线视图中显示消息文本,如 Tweetie 或任何其他类似软件。 我唯一的要求是: 它应该在大约 1-4 行中显示文本它应该能够在文本中显示链接(据我所知,这在两个控件中都应该很简单 - http://developer.apple.com/mac/library/qa/qa2006/qa1487.html) 它应该让用户选择和复制文本它不应该让用户滚动文本、编辑文本或显示通常出现在可编辑文本字段中的上下文菜单,它甚至不应该在该字段中显示文本光标 有这样的要求,我使用 NSTextField 还是 NSTextView 更好? NSTextField 足够好,还是 NSTextView 有一些重要的东西,而 NSTextField 没有? 回答1 有人可以向我解释 NSTextField 和 NSTextView 之间的主要区别是什么吗? 我知道 NSTextView 有更多功能,通常用于较长的文本,而 NSTextField 通常用于单行纯文本字段

2021-11-28 07:46:35    分类:技术分享    cocoa   macos   text   nstextfield   nstextview

Append to NSTextView and scroll

OK, what I need should have been very simple. However, I've looked everywhere and I'm not sure I've found something that works 100% (and it's something that has troubled me in the past too). So, here we are : I want to be able to append to an NSTextView After appending, the NSTextView should scroll down (so that that latest appended contents are visible) Rather straightforward, huh? So... any ideas? (A code example that performs exactly this simple "trick" would be more than ideal...)

2021-11-28 04:24:27    分类:问答    objective-c   macos   cocoa   nstextview

Hide Markdown Characters with NSLayoutManager in Swift

I am working on a rich text editor in a Mac app that uses Markdown syntax. I use NSTextStorage to watch for matches in Markdown syntax, then apply styles to the NSAttributedString in real time like this: At this point, I'm already in way over my head on this stuff, but I'm excited to be making progress. :) This tutorial was very helpful. As a next step, I want to hide the Markdown characters when the NSTextView's string is rendered. So in the example above, once the last asterisk is typed, I want the * * characters to be hidden and just see sample in bold. I'm using an NSLayoutManager delegate

2021-11-27 17:16:14    分类:问答    nstextview   textkit   nslayoutmanager   nstextstorage

NSAttributedString 高亮/背景颜色显示在行之间(丑陋)(NSAttributedString highlight/background color shows between lines (ugly))

问题 我正在尝试在 NSTextView 中很好地显示突出显示的段落。 现在,我通过创建一个带有背景颜色的 NSAttributedString 来做到这一点。 这是一些简化的代码: NSDictionary *attributes = @{NSBackgroundColorAttributeName:NSColor.greenColor}; NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:@"Here is a single line of text with single spacing" attributes:attributes]; [textView.textStorage setAttributedString:attrString]; 这种方法基本上有效,因为它生成突出显示的文本。 不幸的是,当存在多条线时,高光会覆盖线之间的垂直空间以及线本身,导致丑陋。 有谁知道在可可中进行这种突出显示的方法? 下图基本上就是我要找的(忽略白框上的阴影): 我愿意使用 CoreText、html 或任何使事情看起来更好的东西。 回答1 您将需要继承 NSLayoutManager 并覆盖: - (void)fillBackgroundRectArray:(const CGRect

2021-11-27 06:41:56    分类:技术分享    macos   cocoa   core-text   nstextview   nsattributedstring

Restoring from versions browser on OSX lion not working... ideas?

I'm trying to restore a document based application from a previous version on Lion. When I select "restore version", the text view doesn't reflect the changes. However, if I close the application and reopen, the changes are there. I'm using the file wrapper variants of NSDocument, so how can I make the text view's text storage reflect the version that's selected immediately? Am I missing something?

2021-11-27 04:53:27    分类:问答    cocoa   nstextview   osx-lion   autosave

bind:toObject:withKeyPath:options: 是单向绑定吗?(bind:toObject:withKeyPath:options: is one-way binding?)

问题 我有两个窗口:窗口 A 从 NIB 加载; 并且以编程方式创建窗口 B。 两个窗口都有一个 NStextView:窗口 A 中文本视图的属性字符串使用 IB绑定到模型的属性text ; 而窗口 B text本-[NSObject bind:toObject:withKeyPath:options:]使用-[NSObject bind:toObject:withKeyPath:options:]方法绑定到模型的text属性。 [textview bind:@"attributedString" toObject:obj withKeyPath:@"text" options:nil]; 这是奇怪的事情:窗口 B 中的 textview 确实绑定到obj.text ,但 textview 中的更改永远不会更新到obj.text 。 但是,如果我在窗口 A 的 textview 中进行了更改,则窗口 B 中的obj.text和 textview 会相应地更新。 所以我在想, -[NSObject bind:toObject:withKeyPath:options:]方法仅用于单向绑定。 我在 Cocoa 文档中找不到明确的解释。 有没有人有这个问题的经验? 如何在代码中实现双向绑定? 回答1 Cocoa 绑定本质上是双向的,但某些行为(如文本字段的连续/实时更新)需要设置特定选项。

2021-11-26 05:18:50    分类:技术分享    cocoa   binding   cocoa-bindings   nstextview

以编程方式更改 NSTextView 的文本(Change the text of a NSTextView programmatically)

问题 我找不到任何似乎与NSTextView显示的文本值相关的参数。 我知道NSTextView使用复杂的结构(使用NSLayoutManager等...),但我找不到修改当前text值的有效方法。 回答1 正确的方法是 "setString" [textView setString:@"the string"]; 回答2 在出口 textView Swift Xcode 8.0 上设置文本 textView.string = newString 回答3 如果您想设置属性文本(格式化文本),请尝试 [myTextView setAttributedString:(NSAttributedString*)attrString]. NSTextView 包含一个实际保存文本的 NSTextStorage 对象... 回答4 像这样的东西: [textView setString:@"new value"]; 回答5 目标 C / Xcode 9 [myTextView setString:@"The string"]; self.myTextView.string = @"My String"; 斯威夫特/ Xcode 9 self.myTextView.setString("MyString") self.myTextView.string = "My String" 回答6

2021-11-26 04:59:26    分类:技术分享    objective-c   macos   cocoa   nstextview

修改 NSTextStorage 导致插入点移动到行尾(Modifying NSTextStorage causes insertion point to move to the end of the line)

问题 我有一个NSTextView子类作为它的NSTextStorage委托。 我正在尝试做两件事: 以某种方式突出显示文本评估文本,然后将答案附加到文本视图。 我在两种不同的方法中执行此操作,均由- (void)textStorageWillProcessEditing:(NSNotification *)notification委托回调调用。 我可以很好地突出显示语法,但是在附加我的答案时,插入点会跳到行尾,我真的不知道为什么。 我的评估方法如下所示: NSString *result = ..; NSRange lineRange = [[textStorage string] lineRangeForRange:[self selectedRange]]; NSString *line = [[textStorage string] substringWithRange:lineRange]; line = [self appendResult:result toLine:line]; // appends the answer [textStorage replaceCharactersInRange:lineRange withString:line]; 这样做会很好地附加我的结果,但问题是,如上所述,插入点跳到最后。 我试过了: 将上述调用包装在

2021-11-25 08:53:11    分类:技术分享    macos   cocoa   nstextview   nstextstorage

NSString boundingRectWithSize 稍微低估了正确的高度 - 为什么?(NSString boundingRectWithSize slightly underestimating the correct height - why?)

问题 我正在尝试根据当前宽度自动调整文本字段/视图的大小。 换句话说,我希望宽度保持不变,但根据提供给它的文本调整高度。 它似乎正在工作,但由于某种原因,尽管努力手动将其移回,但仍与我的窗口底部对齐。 有人能看到我在这里做错了什么吗? NSString *temp = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer vel felis nec massa ultricies blandit non id arcu. Sed enim est, facilisis a feugiat in, consectetur eget arcu. Aenean rutrum, lacus id euismod congue, nisl erat vulputate lectus, non faucibus tortor purus sed sem. Donec tempor dui egestas velit auctor vitae faucibus diam facilisis. Morbi convallis nulla quis est pulvinar quis ultricies sem sollicitudin."; myText.stringValue = temp; NSDictionary

2021-11-25 08:47:12    分类:技术分享    objective-c   nstextfield   nstextview