25

好的,我需要的应该很简单。然而,我到处寻找,我不确定我是否找到了 100% 有效的东西(这也是过去困扰我的东西)。

所以,我们在这里:

  • 我希望能够附加NSTextView
  • 附加后,NSTextView应该向下滚动(以便最新附加的内容可见)

比较直白吧?

所以......有什么想法吗?(一个完全执行这个简单“技巧”的代码示例将非常理想......)

4

5 回答 5

30

在交叉引用了几个答案和来源(进行了一些调整)之后,这里的答案确实有效(假设 _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)];
    });
}
于 2013-03-02T09:47:55.343 回答
13

和分别从 OS X 10.0appendAttributedString10.6开始可用scrollToEndOfDocument

extension NSTextView {
    func append(string: String) {
        self.textStorage?.appendAttributedString(NSAttributedString(string: string))
        self.scrollToEndOfDocument(nil)
    }
}
于 2015-01-09T21:52:54.870 回答
4

只需使用这种方式:

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)];
于 2013-03-02T09:51:45.430 回答
3

这是 Anoop Vaidya 答案的 Swift 版本

extension NSTextView {
    func append(string: String) {
        let oldString = self.string == nil ? "" : self.string!
        let newString = NSString(format: "%@%@", oldString, string)
        self.string = newString
    }
}
于 2014-09-06T11:22:14.070 回答
-2

这是一个更快捷的解决方案:

extension NSTextView {
    func appendString(string:String) {
        self.string! += string
        self.scrollRangeToVisible(NSRange(location:countElements(self.string!), length: 0))
    }
}
于 2014-10-25T09:13:01.127 回答