Подтвердить что ты не робот

Добавить в NSTextView и прокрутить

Хорошо, мне нужно было очень просто. Тем не менее, я смотрел повсюду, и я не уверен, что нашел что-то, что работает на 100% (и это то, что беспокоило меня и в прошлом).

Итак, вот мы:

  • Я хочу, чтобы добавить в NSTextView
  • После добавления NSTextView должен прокручиваться вниз (чтобы отображалось это последнее добавленное содержимое)

Скорее просто, да?

Итак... какие-нибудь идеи? (Пример кода, который выполняет именно этот простой "трюк", был бы более чем идеальным...)

4b9b3361

Ответ 1

После перекрестных ссылок на несколько ответов и источников (с некоторыми изменениями), здесь ответ, который работает (данный _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)];
    });
}

Ответ 2

appendAttributedString и scrollToEndOfDocument доступны начиная с OS X 10.0 и 10.6 соответственно

extension NSTextView {
    func append(string: String) {
        self.textStorage?.appendAttributedString(NSAttributedString(string: string))
        self.scrollToEndOfDocument(nil)
    }
}

Ответ 3

Просто используйте этот способ:

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

Ответ 4

Здесь версия Swift версии Anoop Vaidya отвечает

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

Ответ 5

Здесь решение Swiftier:

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