Перерисовка NSTableView не обновляет отображение, закрепление выделения - PullRequest
4 голосов
/ 10 июля 2011

Хотя я знаю решение этой проблемы, мне интересно, может ли кто-нибудь объяснить мне это решение.Я также хотел получить это там, потому что я не мог найти никакого упоминания об этой проблеме в Интернете, и мне потребовалось несколько часов в течение нескольких дней, чтобы выследить.У меня NSTableView ведет себя странно в отношении перерисовок и его выбора.Проблема выглядит следующим образом:

Содержимое таблицы исчезает, а не появляется сразу после появления на экране.При прокрутке содержимого новые появляющиеся строки также исчезают. Когда вы делаете выделение (одно или несколько) и прокручиваете его за пределы экрана, затем делаете другое выделение (которое должно заменить, а не добавление к первому выделению), первоевыбор не очищается должным образом.Если вы вернетесь к нему, он все еще там, в дополнение к вашему новому выбору.Это проблема обновления дисплея, а не проблемы выбора - т. Е. Ваш новый выбор действителен, он просто отображается неправильно.

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

Проблема была решена следующим образом: в инспекторе эффектов просмотра (в крайнем правом углу) снимите флажок «Базовый слой анимации» для окна.main view.

Может кто-нибудь объяснить, что здесь происходит, и, возможно, улучшить решение?

1 Ответ

2 голосов
/ 10 июля 2011

Похоже, Core Animation и NSTableView не очень хорошо ладят. Эффект «затухания» является побочным продуктом работы базовой анимации. Когда у вас есть основная анимация в одном представлении, она также включена во всех подпредставлениях этого представления.

Я не рекомендую использовать базовую анимацию на Mac без крайней необходимости, потому что некоторые элементы интерфейса (например, NSTextView и NSTableView) не совместимы с ним. В iOS значительно улучшена поддержка табличных представлений и тому подобного с использованием базовой анимации, главным образом потому, что она была разработана с учетом основной анимации.

Я знаю, что некоторые более простые элементы интерфейса совместимы (например, NSTextField и NSButton).

Если вам абсолютно необходима базовая анимация в остальной части окна, поместите все остальные представления в подпредставление представления содержимого, оставив представление таблицы непосредственно в представлении содержимого. Затем вы можете включить Core Animation в другом представлении.

Комментаторы, не стесняйтесь добавлять в список того, что совместимо, а что нет.

...