追加到NSTextView并滚动
好的,我需要的应该已经很简单了。然而,我到处寻找,我不确定自己找到了一种能够100%工作的东西(这也是过去困扰我的东西)。追加到NSTextView并滚动
所以,我们在这里:
- 我希望能够追加到
NSTextView
- 追加后,
NSTextView
应该向下滚动(以便最新的附加内容是可见的)
相当直截了当的,是吧?
那么...有什么想法? (执行的正是这种简单的“绝招” A代码示例会比理想更...)
交叉引用几个答案和来源(一些调整)后,这里的答案是确实工作(给_myTextView
是NSTextView
出口):
- (void)appendToMyTextView:(NSString*)text
{
dispatch_async(dispatch_get_main_queue(), ^{
NSAttributedString* attr = [[NSAttributedString alloc] initWithString:text];
[[_myTextView textStorage] appendAttributedString:attr];
[_myTextView scrollRangeToVisible:NSMakeRange([[_myTextView string] length], 0)];
});
}
简单地用这样的方式:
for (NSInteger i=1; i<=100; i++) {
[self.textView setString:[NSString stringWithFormat:@"%@\n%@",[self.textView string],@(i)]];
}
[self.textView scrollRangeToVisible:NSMakeRange([[self.textView string] length], 0)];
这与我的方法几乎一样(除了从主线程执行'NSTextView'的技巧,根据我的经验,如果要避免小故障和各种意外行为......实际上更安全)。无论如何,谢谢你的回答! ;-) – 2013-03-02 09:54:40
你使用了块,并附加了textView的文本,我重新写了它,你的比我的好。 – 2013-03-02 09:58:50
这里的Anoop维迪的回答迅捷的版本
extension NSTextView {
func append(string: String) {
let oldString = self.string == nil ? "" : self.string!
let newString = NSString(format: "%@%@", oldString, string)
self.string = newString
}
}
我改变了语义,以便在追加时不总是添加换行符。 – Kaydell 2014-09-06 11:23:34
这里有一个Swifti 呃解决方案:
extension NSTextView {
func appendString(string:String) {
self.string! += string
self.scrollRangeToVisible(NSRange(location:countElements(self.string!), length: 0))
}
}
不要使用'_myTextView'。改用'self.myTextView'。只有在连续数百万次执行代码行时,才应使用“_myTextView”访问属性的方法。使用GCD时尤其如此,因为'self.myTextView'是线程安全的(取决于它的声明方式)。 – 2014-04-04 04:18:29