Кажется, что существует два варианта: (1) использовать NSTableView и (2) использовать NSTextView. Console.app, похоже, использует NSTableView, но NSTextView, вероятно, меньше кода.
Для (1) я бы написал источник NSTableDataSource, который возвращает соответствующую строку (из памяти или с диска) для tableView_objectValueForTableColumn_rowIndex_
и общее количество строк журнала для numberOfRowsInTableView_
. Установите этот источник данных в качестве источника данных для NSTableView. Возможно, вам нужно будет позвонить tableView.reloadData()
, чтобы повторно отобразить данные, когда приходит новая строка журнала. Предполагая, что представление таблицы встроено в NSScrollView (по умолчанию, если вы создаете представление таблицы в Interface Builder), вы можете прокручивать нижнюю часть с помощью этого метода от компании Apple Руководства по программированию Scroll View (легко переведен на Python)
- (void)scrollToBottom:sender;
{
NSPoint newScrollOrigin;
// assume that the scrollview is an existing variable
if ([[scrollview documentView] isFlipped]) {
newScrollOrigin=NSMakePoint(0.0,NSMaxY([[scrollview documentView] frame])
-NSHeight([[scrollview contentView] bounds]));
} else {
newScrollOrigin=NSMakePoint(0.0,0.0);
}
[[scrollview documentView] scrollPoint:newScrollOrigin];
}
Очевидно, что этот код предполагает, что у вас есть IBOutlet с видом прокрутки.
Для (2) вы можете добавить строку в конец текстового вида с помощью textView.textStorage().appendString_(new_log + '\n')
(при условии, что на конце нет новой строки). Вы можете принудительно закрыть окно прокрутки до конца (косвенно), вызвав textView.setSelectedRange_(NSMakeRange(textView.textStorage().length(),0))
Для опции 2 вы должны использовать 'textView.textStorage(). AppendAttributedString_ (NSAttributedString.alloc(). InitWithString_ (new_log + u" \ n ")', и прокрутка, похоже, не работает для меня. Кроме того, может быть целесообразно вызвать 'beginEditing()' и 'endEditing()' в 'textStorage()' до и после редактирования строки. – Patrick
Вместо 'setSelectedRange_', используйте' scrollRangeToVisible_'. См. Http://stackoverflow.com/questions/15546808/scrolling-nstextview-to-bottom – Patrick