Как отобразить неопределенный NSProgressIndicator в NSOutlineView? - PullRequest
4 голосов
/ 29 июня 2009

Мне нужно отобразить прогресс загрузки дочерних элементов. Посоветуйте, пожалуйста, как реализовать индикатор прогресса, как это делается в приложении Почта:

Индикатор хода выполнения в общих чертах http://www.quicksnapper.com/files/10513/5329281414A48CEBA2FFE0_m.png

P. S. Вот исходный код использования подвидов индикатора: http://snippets.dzone.com/posts/show/7684

Ответы [ 3 ]

6 голосов
/ 29 июня 2009

Это сложнее, чем должно быть, потому что Apple не предоставляет NSProgressIndicatorCell. Хотя табличные и контурные представления поддерживают идею отображения в них пользовательских ячеек, они не настроены так, чтобы легко поддерживать настраиваемые подпредставления.

Итак, уловка заключается в том, как получить полное представление NSProgressIndicator для отображения и анимации в нужном месте окна, без возможности его фактической установки в строке представления таблицы?

Уловка, которую я использовал, заключается в буквальной установке NSProgressIndicator в качестве подпредставления самого контура или табличного представления. Чтобы найти место для добавления подпредставления, чтобы оно выглядело как «в строке», используйте frameOfCellAtColumn: row: метод. Затем вы можете расположить свой индикатор прогресса в этом месте на виде структуры. Когда вы закончите вращать индикатор прогресса, вы, вероятно, больше не хотите его показывать, просто удалите его из суперпредставления и откажитесь от него.

Вы должны убедиться, что на индикаторе прогресса установлены требуемые флаги автоматического изменения размера, чтобы он перемещался в правильном направлении, когда / если размер вашего контурного вида изменяется.

Я уверен, что есть и другие подобные хаки для достижения желаемого конечного результата. Я не думаю, что есть какой-то сверхчистый способ выполнить этот трюк.

3 голосов
/ 29 июня 2009

Вена - это программа чтения каналов с открытым исходным кодом (лицензия Apache), у которой это есть в списке источников. Вам нужно взглянуть на исходный код Вены , чтобы увидеть, как они это сделали.

2 голосов
/ 11 августа 2009

Реализация Вены не идеальна. Затем добавьте канал в папку во время загрузки, и индикатор выполнения будет занят, сверните эту папку. Вы увидите, что индикатор прогресса все еще работает в том же месте.

...