Добавить в NSTextView и прокрутить
Хорошо, мне нужно было очень просто. Тем не менее, я смотрел повсюду, и я не уверен, что нашел что-то, что работает на 100% (и это то, что беспокоило меня и в прошлом).
Итак, вот мы:
- Я хочу, чтобы добавить в
NSTextView
- После добавления
NSTextView
должен прокручиваться вниз (чтобы отображалось это последнее добавленное содержимое)
Скорее просто, да?
Итак... какие-нибудь идеи? (Пример кода, который выполняет именно этот простой "трюк", был бы более чем идеальным...)
Ответы
Ответ 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))
}
}