附加到NSTextView并滚动

时间:2013-03-02 09:37:41

标签: objective-c macos cocoa nstextview

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

所以,我们在这里:

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

相当直白,是吗?

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

5 个答案:

答案 0 :(得分:28)

在交叉引用几个答案和来源(通过一些调整)之后, 工作的答案(给定_myTextViewNSTextView出口):

- (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)];
    });
}

答案 1 :(得分:10)

{x 1}和appendAttributedString分别从OS X 10.010.6开始提供

scrollToEndOfDocument

答案 2 :(得分:5)

只需使用这种方式:

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)];

答案 3 :(得分:2)

这是Swo版本的Anoop Vaidya的回答

extension NSTextView {
    func append(string: String) {
        let oldString = self.string == nil ? "" : self.string!
        let newString = NSString(format: "%@%@", oldString, string)
        self.string = newString
    }
}

答案 4 :(得分:-1)

这是一个Swifti er 解决方案:

extension NSTextView {
    func appendString(string:String) {
        self.string! += string
        self.scrollRangeToVisible(NSRange(location:countElements(self.string!), length: 0))
    }
}