Отображение результатов регистрации в Какао - PullRequest
2 голосов
/ 12 февраля 2009

Каков наилучший способ отображения постоянно обновляемых результатов ведения журнала с использованием компонентов какао? Выходные данные основаны на строках и генерируются приложением. Добавляемые строки должны быть быстрыми, а представление должно автоматически прокручиваться до самого дна. В целом, он должен работать и выглядеть как базовый стандарт в терминале.

Мой код написан на Python с использованием моста PyObjC. Я ищу подходы / примеры, которые я могу адаптировать, код Objective-C приветствуется.

1 Ответ

4 голосов
/ 12 февраля 2009

Кажется, что есть два варианта: (1) использовать NSTableView и (2) использовать NSTextView. Console.app, по-видимому, использует NSTableView, но NSTextView, вероятно, меньше кода.

Для (1) я бы написал NSTableDataSource, который возвращает соответствующую строку (из памяти или с диска) для tableView_objectValueForTableColumn_rowIndex_ и общее количество строк журнала для numberOfRowsInTableView_. Установите этот источник данных в качестве источника данных для NSTableView. Вам может потребоваться вызвать tableView.reloadData(), чтобы заново отобразить данные, когда появляется новая строка журнала. Предполагая, что табличное представление встроено в NSScrollView (по умолчанию, если вы создаете табличное представление в Интерфейсном Разработчике), вы можете прокрутить вниз этот метод из Руководства по программированию 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))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...